将参数传递给FileReader onload事件

BeN*_*ErR 20 javascript html5 filereader

我需要阅读一些由用户给出的csv文件.使用拖放div将文件传递给页面/脚本,该div处理文件删除,如下所示:

function handleFileDrop(evt) {
    evt.stopPropagation();
    evt.preventDefault();
    var files = evt.dataTransfer.files; // FileList object.
    ...
}
Run Code Online (Sandbox Code Playgroud)

我需要用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);
}
Run Code Online (Sandbox Code Playgroud)

在此之前,一切都很好.我需要的是也将文件名传递给reader.onload事件,例如:

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

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

    };
})(currFile); 
Run Code Online (Sandbox Code Playgroud)

有可能吗?我怎样才能做到这一点?在此先感谢任何帮助,最好的问候

Gra*_*ham 50

请尝试以下方法:

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);
Run Code Online (Sandbox Code Playgroud)

在这里,fileName每次将文件传递给外部方法时,您都要创建一个新变量.然后,您将创建一个函数,该函数可以访问该变量(由于闭包)并返回它.

  • 怎样才能获得文件名和reader.result值? (3认同)