使用一个输入 javascript 处理目录/文件上传

3 html javascript html5-filesystem

我想允许用户拖动和上传目录和文件。

我知道我可以创造

<input type="file" multiple />
<!-- for files/multiple files upload-->
Run Code Online (Sandbox Code Playgroud)

<input type="file" directory mozDirectory webkitDirectory />
<!-- for directory uploads -->
Run Code Online (Sandbox Code Playgroud)

我尝试检测用户拖动项目时是否是目录或文件,并根据该情况设置目录属性,但事实证明 javascript 不允许您检查它。

我还在很多网站上看到,用户可以将文件和目录甚至多个目录拖到一起。

我怎样才能做到这一点?

Sai*_*nce 5

可以拖放文件夹Chrome >= 21

这是您需要的(未尝试过,但它可以给您带来想法):

function traverseFileTree(item, path) {
  path = path || "";
  if (item.isFile) {
    // Get file
    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 + "/");
      }
    });
  }
}

dropArea.addEventListener("drop", function(event) {
  event.preventDefault();

  var items = event.dataTransfer.items;
  for (var i=0; i<items.length; i++) {
    // webkitGetAsEntry is where the magic happens
    var item = items[i].webkitGetAsEntry();
    if (item) {
      traverseFileTree(item);
    }
  }
}, false);
Run Code Online (Sandbox Code Playgroud)

更多信息可以在这里找到

答案取自这里