将参数传递给FileReader onload事件

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (33)

我需要阅读用户给出的一些csv文件。使用拖放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每次将文件传递给外部方法时,都会创建一个新变量。然后创建一个访问该变量(由于关闭)并返回的函数。

扫码关注云+社区

领取腾讯云代金券