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

Posted

技术标签:

【中文标题】使用一个输入 javascript 处理目录/文件上传【英文标题】:Handle directory/files upload with one input javascript 【发布时间】:2015-07-14 23:15:15 【问题描述】:

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

我知道我可以创造

<input type="file" multiple />
<!-- for files/multiple files upload-->

<input type="file" directory mozDirectory webkitDirectory />
<!-- for directory uploads -->

我尝试在用户拖动项目时检测它是目录还是文件,并根据它设置目录属性,但结果表明 javascript 不允许你检查。

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

我怎样才能做到这一点?

【问题讨论】:

【参考方案1】:

Chrome &gt;= 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);

更多信息可以找到here

答案来自here

【讨论】:

感谢树功能,它会很有用,但我怎么知道用户是否在输入中拖动了文件夹或项目? 我在 TypeScript 和 Firefox 中使用它,它可以工作。 @JohannesFlügel 很高兴听到这个消息.. :) 编码快乐.. 干杯。

以上是关于使用一个输入 javascript 处理目录/文件上传的主要内容,如果未能解决你的问题,请参考以下文章

处理用户输入与显示数据------------(创建本地临时文件在/temp中创建临时文件创建临时目录tee命令)

如何从“Zapier 代码”(Javascript)读取文件输入

目录和文件-文件处理

如何使用动态目录中的 webpack 要求 JavaScript

IFE JavaScript Task0002-4 小练习4:输入提示框

IFE JavaScript Task0002-2 小练习2:日期对象的使用