我需要读取用户提供的一些 csv 文件。使用拖放 div 将文件传递到页面/脚本,该 div 按如下方式处理文件放置:
function handleFileDrop(evt) {
evt.stopPropagation();
evt.preventDefault();
var files = evt.dataTransfer.files; // FileList object.
...
}
我需要使用将文件转换为数组的 csv 库来解析每个文件,但我还需要跟踪我当前正在解析的文件名。这是我用来解析每个文件的代码:
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);
}
在此之前,一切正常。我还需要将文件名传递给 reader.onload
事件,例如:
reader.onload = (function(theFile){
return function(e){
***** I need to have fileName value HERE *****
};
})(currFile);
可能吗?我怎样才能做到这一点?在此先感谢您的帮助,最好的问候
最佳答案
尝试以下操作:
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);
在这里,每次将文件传递给外部方法时,您都会创建一个新的 fileName
变量。然后,您将创建一个可以访问该变量(由于闭包)并返回它的函数。
关于javascript - 将参数传递给 FileReader onload 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16937223/