在filereader异步加载文件后获取文件名

Sid*_*009 30 javascript android fileapi cordova

我正在一个目录中加载几个文件来解析它们中的一些数据.这到目前为止工作得很好,但我想知道我正在看的文件.所以我需要加载后的文件名.有人可以提供帮助吗?

//获取dir中的所有文件

function updateData(){
  var dirReader = approot.createReader();

  var fail =failCB('Error - Directory for parsing failed to open'); // logs fail...
  dirReader.readEntries(parseData,fail); 
}
Run Code Online (Sandbox Code Playgroud)

//加载每个文件

function parseData(entries){
  var i;
  for (i=0; i<entries.length; i++) {
    var reader = new FileReader();
    reader.onloadend = createListItem;
    reader.readAsText(entries[i]);
  }
}
Run Code Online (Sandbox Code Playgroud)

//这里我想知道这个名字!!!!

function createListItem(evt){
    // it gives me all the loaded data. But based on wich file it was, i would like to handle it!
  console.log(evt.target.result)
    // lets say something like this
    $('#content').find(   file.name   ).append(evt.target.result);
  }
}
Run Code Online (Sandbox Code Playgroud)

欢呼任何建议;)

ebi*_*del 38

围绕File捕获当前文件创建一个闭包.然后你可以得到文件名.

一个例子:http://www.html5rocks.com/en/tutorials/file/dndfiles/#toc-reading-files

关闭以捕获文件信息.

function parseData(entries){
  for (var i=0; i<entries.length; i++) {
    reader.onloadend = (function(file) {
      return function(evt) {
        createListItem(evt, file)
      };
    })(entries[i]);
    reader.readAsText(entries[i]);
  }
}
Run Code Online (Sandbox Code Playgroud)

被调用的函数得到一个额外的参数

function createListItem(evt, file) {
  console.log(evt.target.result)
  console.log(file.name);
}
Run Code Online (Sandbox Code Playgroud)

  • 更好的方法是将您的文件条目作为属性附加到您的读者,如此用户问题中所示:http://stackoverflow.com/questions/4404361/html5-file-api-get-file-对象内-的FileReader回调/ 4404427#4404427 (2认同)

小智 14

以下源代码向文件读取器添加属性

    for(i=0; i < files.length; i++)
    {
        var fileReader = new FileReader();
        fileReader.onload = function(file)
        {
              // DO what you need here
              // file name = file.target.fileName
        } // end of reader load
        fileReader.fileName = files[i].name;
        fileReader.readAsBinaryString(files[i]);
    }
Run Code Online (Sandbox Code Playgroud)