Signatur
Beschreibung
Die Eigenschaft FileList.length liefert die Anzahl der File-Objekte in einer FileList. Eine solche Liste bekommst du vor allem über HTMLInputElement.files bei einem <input type="file"> oder über DataTransfer.files bei Drag & Drop.
Typische Einsatzzwecke sind: prüfen, ob der Nutzer überhaupt eine Datei gewählt hat (length === 0), die Anzahl hochzuladender Dateien begrenzen, einen Zähler in der Oberfläche anzeigen oder mit einer klassischen for-Schleife über item(i) bzw. files[i] iterieren.
Die Eigenschaft ist schreibgeschützt. Eine Zuweisung wie files.length = 0 wird ohne Fehlermeldung ignoriert (im Strict Mode gibt es einen TypeError). Um eine Auswahl zurückzusetzen, setzt man stattdessen input.value = "".
Rückgabewert
unsigned long) mit der Anzahl der Dateien in der Liste. Ist 0, wenn keine Datei gewählt wurde.Beispiele
Prüfen, ob eine Datei gewählt wurde
// HTML: <input type="file" id="upload" multiple>
const input = document.querySelector('#upload');
input.addEventListener('change', () => {
const { files } = input;
if (files.length === 0) {
console.log('Keine Datei ausgewählt.');
return;
}
console.log(`${files.length} Datei(en) ausgewählt.`);
});
Maximale Anzahl an Dateien begrenzen
const MAX_FILES = 5;
const input = document.querySelector('#upload');
input.addEventListener('change', () => {
if (input.files.length > MAX_FILES) {
alert(`Bitte höchstens ${MAX_FILES} Dateien auswählen.`);
input.value = ''; // Auswahl zurücksetzen
return;
}
for (let i = 0; i < input.files.length; i++) {
const file = input.files[i];
console.log(`${file.name}: ${file.size} Bytes`);
}
});
Dateianzahl bei Drag & Drop anzeigen
const dropZone = document.querySelector('#drop-zone');
dropZone.addEventListener('dragover', (event) => event.preventDefault());
dropZone.addEventListener('drop', (event) => {
event.preventDefault();
const count = event.dataTransfer.files.length;
dropZone.textContent = count === 1
? '1 Datei abgelegt'
: `${count} Dateien abgelegt`;
});
FileList in ein Array umwandeln
const input = document.querySelector('#upload');
input.addEventListener('change', () => {
const files = Array.from(input.files);
console.log(files.length === input.files.length); // true
const totalSize = files.reduce((sum, f) => sum + f.size, 0);
console.log(`Gesamtgröße: ${totalSize} Bytes`);
});
// Wichtig · Fallstricke
- Schreibgeschützt:
files.length = 0leert die Liste nicht. Zum Zurücksetzen nimmst duinput.value = ''. Um eine Liste gezielt zu verändern, baust du übernew DataTransfer()eine neue auf und weistdataTransfer.filesdem Eingabefeld zu. - Kein echtes Array:
FileListhat zwarlengthund Index-Zugriff, aber keine Methoden wiemapoderfilter. NutzeArray.from()oder Spread-Syntax[...files].for...offunktioniert in modernen Browsern. - Nicht immer vorhanden:
input.filesist bei Eingabefeldern, die nicht vom Typfilesind,null. Ein direkter Zugriff auf.lengthwirft dann einen Fehler, daher lieberinput.files?.length ?? 0. - Drag & Drop: Bei
dragover/dragenteristdataTransfer.files.lengthaus Sicherheitsgründen meist0. Verlässliche Werte gibt es erst imdrop-Ereignis. - Ohne das Attribut
multipleistlengthhöchstens1. - Die Eigenschaft wird von allen modernen Browsern unterstützt.