<input type="file">
元素的.files
属性设置为来自不同<input type="file">
元素的.files
属性或DataTransfer.files
属性的FileList
。请参见使 .files 可设置 #2866,在上传文件到 HTML 表单和提交它之间发生了什么?。
FileList
对象具有Symbol.iterator
属性,我们可以使用它来设置可迭代的File
对象,但是.files
.length
仍然设置为0
,并且传递一个具有使用上述方法设置.files
的<form>
,会产生一个File
对象,其.size
设置为0
。如何将
File
设置为FileList
,并将FileList
的.length
设置为设置的文件数,在该文件集设置于FormData()
对象中?
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