arquivo de input para array javascript / jquery

Eu tenho um arquivo de tipo de input onde eu coloco em uma variável em javascript onde eu quero manipular os arquivos.

HTML:

 

JavaScript:

 var upload = document.getElementById('file1'); upload.files.splice(idtoremove,1) //not working 

Como posso excluir um item específico na variável de upload? .Eu tenho a busca que o arquivo de tipo de input é um readonly e você não pode manipulá-lo, a menos que você colocá-lo em uma matriz e fazer o upload dos arquivos com ajax.

estou fazendo isso para fazer o upload para minha galeria. primeiro eu seleciono várias imagens. então haverá uma pré-visualização primeiro das imagens antes de fazer o upload. haverá também uma opção para remover uma foto. meu problema é. Como posso excluir esse arquivo de foto no arquivo de input. Portanto, a solução possível é armazenar o arquivo de input no array e, em seguida, excluir a foto que você deseja no array, em seguida, criar um formdata para o array e fazer o upload usando ajax

Editar, Atualizado

Como posso excluir um item específico na variável de upload?

Se o resultado esperado é array de objects de arquivo seria ajustar abordagem para splicing array itens de files originais object – e envio spliced ​​array como upload – em vez de tentar “excluir” itens do object files originais e ainda fazer upload de files originais object.


O object FileList não possui o método .splice() . Tente utilizar .slice() , .call() para converter files em Array , depois chame o método .splice() em array de objects File , por exemplo;

 // `_files` : `File` object items from original `files` `FileList` // call `.splice()` on items that would be uploaded , // upload `_files` array - _not_ original `files` `FileList` object // eg; `_files`:`File` objects to _keep_ not "delete" from `files` var idstokeep = [0, 2]; // splice , keep first `2` files var _files = Array.prototype.slice.call(files).splice(idstokeep[0], idstokeep[1]); 

Veja como funciona o Array.prototype.slice.call ()?


Como alternativa, utilize

item()

Retorna um object File representando o arquivo no índice especificado na lista de arquivos.

para retornar arquivos em um index específico dentro de FileList

  var files = e.target.files; // return `file` at `index` `1` var firstFile = files.item(1); 

 var upload = document.getElementById("file1"); upload.onchange = function(e) { var files = e.target.files; // https://developer.mozilla.org/en-US/docs/Web/API/FileList#item var firstFile = files.item(1); var idstokeep = [0, 2]; // keep first `2` files from `multiple` selection var _files = Array.prototype.slice.call(files).splice(idstokeep[0], idstokeep[1]); console.log(files, files.length , _files, _files.length , firstFile); }; 
   
 var upload = document.getElementById("file1"); upload.onchange = function(e) { var files = e.target.files; // https://developer.mozilla.org/en-US/docs/Web/API/FileList#item var firstFile = files.item(1); var idstokeep = [0, 2]; // keep first `2` files from `multiple` selection var _files = Array.prototype.slice.call(files).splice(idstokeep[0], idstokeep[1]); console.log(files, files.length , _files, _files.length , firstFile); };