/ / Pasar un parámetro al evento de carga de FileReader - javascript, html5, filereader

Pasar un parámetro al evento de carga de FileReader - javascript, html5, filereader

Necesito leer algunos archivos csv, proporcionados por el usuario. Los archivos se pasan a la página / script usando un div de arrastrar y soltar, que maneja la colocación de archivos de la siguiente manera:

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

Necesito analizar cada archivo con una biblioteca csv que lo convierte en una matriz, pero también necesito realizar un seguimiento del nombre del archivo que estoy analizando actualmente. Aquí está el código que utilizo para analizar cada archivo:

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);
}

Hasta esto, todo funciona muy bien. Lo que necesito es pasar también el nombre del archivo al reader.onload evento, por ejemplo:

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

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

};
})(currFile);

¿Es posible? ¿Cómo puedo hacer esto? Gracias de antemano por cualquier ayuda, saludos cordiales

Respuestas

43 para la respuesta № 1

Pruebe lo siguiente:

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);

Aquí, estás creando un nuevo fileName variable cada vez que se pasa un archivo al método externo. Entonces estás creando una función que tiene acceso a esa variable (debido al cierre) y devolviéndola.