文件读取器后获取文件名异步加载文件

问题描述:

我正在加载目录中的几个文件来解析他们的一些数据。迄今为止,这工作很好,但我想知道我正在看的至极文件。所以我需要文件的名称加载后。 任何人都可以帮忙吗?文件读取器后获取文件名异步加载文件

//获取所有文件目录

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

欢呼的任何建议;)

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

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

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

它看起来不错!但可以请你在这里发布你的答案/例子...我想知道这个封闭是如何工作的。 – Sidrich2009

+0

还有一些零件我没有得到: 1. for(var i = 0,f; f = files [i]; i ++) 什么是我从来没有见过这种方式写一个for循环 2.你的onload =('长函数调用')(f),也从来没有见过^^它做什么以及为什么函数后面有一个f? – Sidrich2009

+0

执行此操作的更好方法是将您的文件条目作为属性附加到读者,如此用户问题所示: http://*.com/questions/4404361/html5-file-api-get-文件对象中-的FileReader回调/ 4404427#4404427 – kokorohakai

下面的源代码添加一个属性文件读取器

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