Es ist möglich, .files
Eigenschaft <input type="file">
Element zu einem FileList
von zum Beispiel eine andere <input type="file">
Element .files
Eigenschaft oder DataTransfer.files
Eigenschaft festlegen. Siehe Make .files settable #2866, What happens between uploading a file to an HTML form and submitting it?.Wie legen Sie die Dateiobjekte und die Längeneigenschaft im FileList-Objekt fest, wo die Dateien auch im FormData-Objekt wiedergegeben werden?
FileList
Objekt hat eine Symbol.iterator
Eigenschaft, die wir jedoch ein File
Objekt zu setzen, die iterable ist verwenden können, wird die .files
.length
noch auf 0
und vorbei ein <form>
mit <input type="file">
Satz, wo die .files
gesetzt wird, um den oben genannten Ansatz ergibt eine File
Objekt mit .size
festgelegt auf 0
.
Wie die File
bei FileList
setzen und setzen .length
von FileList
auf die Anzahl der Dateien festgelegt, in dem die Dateien auf FormData()
Objekt festgelegt werden?
const input = document.createElement("input");
const form = document.createElement("form");
const [...data] = [
new File(["a"], "a.txt")
, new File(["b"], "b.txt")
];
input.type = "file";
input.name = "files";
input.multiple = true;
// set `File` objects at `FileList`
input.files[Symbol.iterator] = function*() {
for (const file of data) {
yield file
};
};
form.appendChild(input);
const fd = new FormData(form);
for (const file of input.files) {
console.log(file); // `File` objects set at `data`
}
for (const [key, prop] of fd) {
// `"files"`, single `File` object having `lastModified` property
// set to a time greater than last `File` object within `data`
// at Chromium 61, only `"files"` at Firefox 57
console.log(key, prop);
}
console.log(input.files.length); // 0
wurde in FF57 fixiert sehen https://developer.mozilla.org/en-US/Firefox/Releases/57#DOM –