Chrome Drop文件夹 - 文件不完整

时间:2015-06-19 16:21:28

标签: javascript html5 google-chrome dropzone.js

我正在使用支持drop folder的上传器工作,没关系,但我没有用例。

我有一个文件夹里面有多个文件和文件夹,文件数量是2511,文件夹是2451。我不知道原因,但在drop函数之后它只识别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 + "/");
                  }
                });
              }
        }

现在问题似乎也出现在dropzone和plupload上。

我已经测试了相同的文件夹 http://protonet.github.io/plupload/examples/drag_and_drop.html 结果相同。

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

我感谢任何帮助 感谢。

1 个答案:

答案 0 :(得分: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.

}

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