/ / Passe um parâmetro para o evento onload FileReader - javascript, html5, filereader

Passar um parâmetro para o evento onload FileReader - javascript, html5, filereader

Preciso ler alguns arquivos csv, fornecidos pelo usuário. Os arquivos são passados ​​para a página / script usando um div de arrastar e soltar, que lida com a soltura do arquivo da seguinte maneira:

function handleFileDrop(evt) {
evt.stopPropagation();
evt.preventDefault();
var files = evt.dataTransfer.files; // FileList object.
...
}

Preciso analisar cada arquivo com uma biblioteca csv que o converte em uma matriz, mas também preciso controlar o nome do arquivo que estou analisando no momento. Aqui está o código que uso para analisar cada arquivo:

for(var x = 0; x < files.length; x++){
var currFile = files[x];
var fileName = currFile.name;
var reader = new FileReader();
reader.onload = (function(theFile){
return function(e){
var csvArr = CSV.csvToArray( e.target.result, ";", true );
console.log(csvArr);
};
})(currFile);
reader.readAsText(currFile);
}

Até isso, tudo funciona muito bem. O que eu preciso é também passar o nome do arquivo para o reader.onload evento, por exemplo:

reader.onload = (function(theFile){
return function(e){

***** I need to have fileName value HERE *****

};
})(currFile);

É possível? Como posso fazer isso? Agradecemos antecipadamente por qualquer ajuda, cumprimentos

Respostas:

43 para resposta № 1

Tente o seguinte:

var reader = new FileReader();
reader.onload = (function(theFile){
var fileName = theFile.name;
return function(e){
console.log(fileName);
console.log(e.target.result);
};
})(currFile);
reader.readAsText(currFile);

Aqui, você está criando um novo fileName variável cada vez que um arquivo é passado para o método externo. Em seguida, você está criando uma função que tem acesso a essa variável (devido ao encerramento) e retornando-a.