¿Cómo establecer los objetos File y la propiedad de longitud en el objeto FileList donde los archivos también se reflejan en el objeto FormData?

Es posible configurar.files propiedad de<input type="file"> elemento a unFileList por ejemplo de un diferente<input type="file"> elemento.files propiedad oDataTransfer.files propiedad. VerHacer archivos configurables # 2866, ¿Qué sucede entre subir un archivo a un formulario HTML y enviarlo?.

FileList el objeto tiene unSymbol.iterator propiedad que podemos usar para establecer unFile objeto que es iterable, sin embargo el.files .length todavía está configurado en0 y pasando un<form> teniendo<input type="file"> establecer donde el.files se establece utilizando el enfoque anterior produce unFile objeto que tiene.size ajustado a0.

Cómo configurar elFile aFileList y establecer.length deFileList al número de archivos establecidos, donde los archivos se establecen enFormData() ¿objeto?

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

Respuestas a la pregunta(1)

Su respuesta a la pregunta