2015-06-19 71 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)獲取下一個「塊」的文件。