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

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

//获取dir中的所有文件

function updateData(){ var dirReader = approot.createReader(); var fail =failCB('Error - Directory for parsing failed to open'); // logs fail... dirReader.readEntries(parseData,fail); } 

//加载每个文件

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

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

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

欢呼任何建议;)

Solutions Collecting From Web of "在filereader异步加载文件后获取文件名"

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

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

关闭以捕获文件信息。

 function parseData(entries){ for (var i=0; i 

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

 function createListItem(evt, file) { console.log(evt.target.result) console.log(file.name); } 

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

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

解决此问题的另一种方法是在onload -event之后读取文件名,使用onloadend -event,如下所示:

 for (var i = 0; i < files.length; i++) { var fileReader = new FileReader(); fileReader.fileName = files[i].name; fileReader.onload = function () { /* do something with file */ } fileReader.onloadend = function () { console.log(fileReader.fileName); // here you can access the original file name } fileReader.readAsText(files[i]); }