js 拖拽上传文件夹

需求

获取拖拽到指定元素上的文件夹中的文件,并需要知道相对地址。

项目地址

https://github.com/156ban/droped-file-and-folder-reader
(服务器中运行)

注意

一些方法在mdn上是实验性技术,请在生产中使用它之前仔细检查浏览器兼容性表。

个人在mac上测试发现谷歌,火狐,safiri浏览器上测试时可以用的(其他未知)。

方法介绍(查询自mdn)

首先我们根据drop事件得到event.dataTransfer

常用的获取文件方式是使用dataTransfer.files获取文件列表,但这样无法直接获取文件夹中的文件。

dataTransfer还有一个DataTransfer.items的属性,可以得到一个包含所有拖动数据列表的 DataTransferItemList 对象。

DataTransferItemList的每一项是DataTransferItem,DataTransferItem拥有一个webkitGetAsEntry()方法,如果DataTransferItem表示的是文件,则webkitGetAsEntry()返回FileSystemFileEntry(文件)或FileSystemDirectoryEntry(文件夹),这两个对象都有isDirectory和isFile两个boolean值方便判断。

我们得到了FileSystemDirectoryEntry,FileSystemDirectoryEntry拥有一个createReader方法,createReader()返回一个 FileSystemDirectoryReader可以被用于读取在该目录中的条目的对象。(官方例子

然后我们以FileSystemFileEntry对象的形式得到了拖动的文件夹中的文件,再通过FileSystemFileEntry的file()方法拿到我们想要的file类型的对象(官方例子)。

文件的相对地址我们通过FileSystemFileEntry对象的fullpath属性得到。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值