所以我正在尝试创建一个文件投放器 Web 应用程序。现在,用户可以将文件拖放到屏幕上,我可以读取它们,包括已拖放目录中的所有文件。但是,我不知道脚本何时完成读取文件。
一些代码:
第一个函数处理“drop”事件,并将遍历每个文件并将其发送到另一个函数,该函数将读取其内容。
function readDrop( evt )
{
for( var i = 0; i < evt.dataTransfer.files.length; i++)
{
var entry = evt.dataTransfer.items[i].webkitGetAsEntry();
if(entry)
readContents(entry, "");
}
//Do stuff after all files and directories have been read.
}
这个函数是一个递归的 FileEntry 阅读器。如果是文件,我会读取 FileEntry。如果是目录,它会循环遍历内容并通过这个函数传递。
function readContents(entry, path)
{
if( entry.isFile )
{
readFileData( entry, path, function(fileData)
{
_MyFiles.push( fileData );
});
}
else if( entry.isDirectory )
{
var directoryReader = entry.createReader();
var path = path + entry.name;
directoryReader.readEntries(function(results)
{
for( var j = 0; j < results.length; j++ )
{
readContents(entry, path);
}
}, errorHandler)
}
}
这是我读取文件的功能。回调只是将 fileData 对象推送到全局数组
function readFileData(entry, path, callback)
{
var fileData = {"name": entry.name, "size": 0, "path": path, "file": entry};
entry.file(function(file)
{
fileData["size"] = file.size;
callback( fileData );
}
}
我不确定从这里去哪里,以便在读取所有文件和目录后进行回调。