【问题标题】:Chrome Drop Folder - incomplete filesChrome 放置文件夹 - 不完整的文件
【发布时间】:2015-09-05 17:08:48
【问题描述】:

我正在开发一个支持放置文件夹的上传器,这没问题,但我的用例失败了。

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

这是我正在使用的 drop 函数:

        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/ 与结果相同的数量。

感谢任何帮助 谢谢。

【问题讨论】:

    标签: javascript html google-chrome dropzone.js


    【解决方案1】:

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

    要读取目录的内容,请创建 DirectoryReader 并调用 它的 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 以获取下一个“块”文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-29
      • 1970-01-01
      • 2021-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-15
      • 2011-12-12
      相关资源
      最近更新 更多