webkitGetAsEntry的Javascript拖放文件上载问题
上面的提琴是我代码的精简版本,只是为了突出问题(尝试将文件拖放到窗口中)。基本上,webkitGetAsEntry的Javascript拖放文件上载问题,javascript,html,file-upload,Javascript,Html,File Upload,上面的提琴是我代码的精简版本,只是为了突出问题(尝试将文件拖放到窗口中)。基本上,webkitGetAsEntry()。任何帮助都将不胜感激,谢谢 upload.js function Upload() { _this = this; this.fileList = 'no file'; this.fire = function(droppedFiles) { for(i = 0; i< droppedFiles.length; i++) { this.build
webkitGetAsEntry()。任何帮助都将不胜感激,谢谢
upload.js
function Upload() {
_this = this;
this.fileList = 'no file';
this.fire = function(droppedFiles) {
for(i = 0; i< droppedFiles.length; i++) {
this.buildFileSource(droppedFiles[i].webkitGetAsEntry());
}
//This returns the original string
console.log(this.fileList);
}
this.buildFileSource = function(item, path) {
if(item.isFile) {
item.file(function(file) {
_this.fileList = 'file';
//This works as expected
console.log(_this.fileList);
} );
}
};
}
//Event listeners for dragging
$(document).ready(function() {
window.addEventListener("dragenter", function(e) {
event.stopPropagation();
event.preventDefault();
return false;
}, false);
window.addEventListener("dragover", function(e) {
event.stopPropagation();
event.preventDefault();
return false;
}, false);
window.addEventListener("dragleave", function(e) {
event.stopPropagation();
event.preventDefault();
return false;
}, false);
window.addEventListener("drop", function(e) {
e.stopPropagation();
e.preventDefault();
upload = new Upload;
upload.fire(e.dataTransfer.items);
return false;
}, false);
});
函数上传(){
_这个=这个;
this.fileList='无文件';
this.fire=函数(droppedFiles){
对于(i=0;i
console.log(\u this.fileList)在buildFileSource
方法中修改fileList
之前,正在调用fire
函数中的code>。这是因为文件条目
(您的项
变量)上的文件
函数是异步函数。实际上,对buildFileSource
的每次调用也是异步的。查找有关Entry
界面及其两个子项的更多详细信息:FileEntry
和MDN上的DirectoryEntry
请注意,使用webkitGetAsEntry
方法意味着您的代码只能在Chrome 21+上工作,因为该方法非常特定于Chrome(由于前缀),并且底层概念(Entry
对象)属于文件系统API,目前只有Chrome 21+支持该API 谢谢你的帮助!考虑到异步性,我最终只使用window.setTimeout
轮询一个函数,该函数在填充文件数组后将返回true,然后继续执行。这不是一个理想的解决方案,但它现在起作用了。另外,似乎是说它应该同步返回,但可能我没有读对。我没有意识到这个错误,但它似乎是指webkitGetAsEntry。我所指的函数是item/entry对象上的file函数,它完全是一个异步调用。是的,你的解决方案并不理想。我鼓励您接受文件系统API的异步特性,并相应地重构代码。fwiw说,chrome在版本13+@Shanimal中完全支持该文件API是的,该文件API大约在这段时间得到了支持。我说的是文件系统API,它在很久以后才得到支持。实际上,FileSystemAPI是在完全支持的同时引入的。您特别提到的功能是在版本21+中添加的。。。干杯