2015-06-19 70 views
1

我正在上传拖放文件夹的支持,这是好的,但我失败了一个用例。Chrome拖放文件夹 - 不完整的文件

我有一个文件夹里面有多个文件和文件夹,文件的数量是2511和2451文件夹。我不知道原因,但在拖放功能之后,它只能识别父文件夹中的1576个文件。

简化,这是我使用的降功能:

 filescnt=0; 
     nop=0; 
     $("#dropingArea").on('dragover',function(e){    
      e.preventDefault(); 
      e.stopPropagation(); 
     }); 
     $("#dropingArea").on('dragenter',function(e){    
      e.preventDefault(); 
      e.stopPropagation(); 
     }); 
     $("#dropingArea").on('drop',function(e){ 
      console.log(e); 
      if(e.originalEvent.dataTransfer){ 
       if(e.originalEvent.dataTransfer.files.length) { 
        e.preventDefault(); 
        e.stopPropagation(); 
        /*UPLOAD FILES HERE*/ 
        console.log(e.originalEvent.dataTransfer.items); 
        items = e.originalEvent.dataTransfer.items; 
        for (var i=0; i<items.length; i++) { 
         var item = items[i].webkitGetAsEntry(); 
         if (item) { 
          traverseFileTree(item); 
         } 
        } 
       } 
      } 
     }); 

     function traverseFileTree(item, path) { 
       path = path || ""; 
       if (item.isFile) { 
       // Get file 
       filescnt++; 
       item.file(function(file) { 
        console.log("File:", path + file.name); 
       }); 
       } else if (item.isDirectory) { 
       // Get folder contents 
       var dirReader = item.createReader(); 
       dirReader.readEntries(function(entries) { 
        for (var i=0; i<entries.length; i++) { 
        traverseFileTree(entries[i], path + item.name + "/"); 
        } 
       }); 
       } 
     } 

现在的问题似乎也是在悬浮窗和plupload。

我测试过相同的文件夹 http://protonet.github.io/plupload/examples/drag_and_drop.html 与结果相同的ammount。

http://www.dropzonejs.com/ 与结果相同的量。

我感谢任何帮助 谢谢。

回答

0

http://www.html5rocks.com/en/tutorials/file/filesystem/

要读取目录的内容,创建一个DirectoryReader并调用 其readEntries()方法。无法保证所有 目录的条目将在一次调用中返回到 readEntries()。这意味着您需要不断调用 DirectoryReader.readEntries(),直到不再有结果返回。

从上面的页面

并再次:

function onInitFs(fs) { 

    var dirReader = fs.root.createReader(); 
    var entries = []; 

    // Call the reader.readEntries() until no more results are returned. 
    var readEntries = function() { 
    dirReader.readEntries (function(results) { 
     if (!results.length) { 
     listResults(entries.sort()); 
     } else { 
     entries = entries.concat(toArray(results)); 
     readEntries(); 
     } 
    }, errorHandler); 
    }; 

    readEntries(); // Start reading dirs. 

} 

注意,在我们读过一些结果的情况下,我们调用针对相同dirReader readEntries(results.length!= 0)获取下一个“块”的文件。