文件读取器后获取文件名异步加载文件
问题描述:
我正在加载目录中的几个文件来解析他们的一些数据。迄今为止,这工作很好,但我想知道我正在看的至极文件。所以我需要文件的名称加载后。 任何人都可以帮忙吗?文件读取器后获取文件名异步加载文件
//获取所有文件目录
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);
}
答
下面的源代码添加一个属性文件读取器
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]);
}
它看起来不错!但可以请你在这里发布你的答案/例子...我想知道这个封闭是如何工作的。 – Sidrich2009
还有一些零件我没有得到: 1. for(var i = 0,f; f = files [i]; i ++) 什么是我从来没有见过这种方式写一个for循环 2.你的onload =('长函数调用')(f),也从来没有见过^^它做什么以及为什么函数后面有一个f? – Sidrich2009
执行此操作的更好方法是将您的文件条目作为属性附加到读者,如此用户问题所示: http://*.com/questions/4404361/html5-file-api-get-文件对象中-的FileReader回调/ 4404427#4404427 – kokorohakai