HTML5 拖拽批量上传文件的示例代码


Posted in HTML / CSS onMarch 28, 2018

拖拽批量上传文件夹

该组件基于 Vue.js 实现,UI 框架是 elementUI,完整的 demo 地址在https://github.com/Msxiaoma/upload-folder. 拖拽上传文件夹(仅仅chrome支持)

一、组件描述

  1. 同时拖拽多个文件夹
  2. 删除指定文件夹
  3. 显示当前文件夹的上传进度条
  4. 超过5M的文件夹分片上传

效果如下:

HTML5 拖拽批量上传文件的示例代码 

二、遇到的问题

  1. 拖拽读取每个文件夹下面的文件路径
  2. 如何显示当前上传的文件夹的进度条
  3. 上传文件时跨域携带 cookie
  4. 文件夹分片

三、解决过程

1. 拖拽读取每个文件夹下面的文件路径

在进行拖放操作时, DataTransfer 对象用来保存,通过拖放动作,拖动到浏览器的数据。它可以保存一项或多项数据、一种或者多种数据类型

// 拖拽文件夹
dropFolders (e) {
  e.stopPropagation()
  e.preventDefault()
  var items = e.dataTransfer.items
  for (var i = 0; i < items.length; i++) {
    var item = items[i].webkitGetAsEntry()
    if (item) {
      this.checkFolders(item)
    }
  }
}

// 判断是否为文件夹
checkFolders (item) {
  if (item.isDirectory) {
    this.traverseFileTree(item)
  } else {
    this.$alert('只支持上传文件夹', '提示', {
      confirmButtonText: '确定'
    })
  }
}

traverseFileTree (item, path, parentDir) {
  path = path || ''
  if (item.isFile) {
    item.file((file) => {
        let obj = {
          file: file,
          path: path + file.name,
          attr: item.attr
        }
        this.filesList.push(obj)
    })
  } else if (item.isDirectory) {
    var dirReader = item.createReader()
    dirReader.readEntries((entries) => {
      for (let i = 0; i < entries.length; i++) {
        entries[i].attr = item.attr
        this.traverseFileTree(entries[i], path + item.name + '/', temp)
      }
    }, function (e) {
      console.log(e)
    })
  }
}

2. 上传文件夹的进度条

没有分片的文件:根据文件夹中的文件总数,算出每个文件占文件夹的百分比,当一个文件上传成功时,修改文件夹 process;

分片的文件:算出每个文件占文件的百分比后,算出每块文件占文件的百分比,每块文件上传成功后,修改文件夹的 process.

3. 跨域携带 cookie

当服务器设置响应头

    Access-Control-Allow-Origin:必须指定明确的、与请求网页一致的域名,不能为 *。   Access-Control-Allow-Credentials: true

设置请求头:

    withCredentials:true

补充:

substring 和 substr 的区别

substr(start [, length ]) 返回一个从指定位置开始的指定长度的子字符串。

start:必选项。所需的子字符串的起始位置。字符串中的第一个字符的索引为 0。
length:可选项。在返回的子字符串中应包括的字符个数。

substring 返回位于 String 对象中指定位置的子字符串,返回一个包含从 start 到最后(不包含 end )的子字符串的字符串

start:指明子字符串的起始位置,该索引从 0 开始起算。
end:指明子字符串的结束位置,该索引从 0 开始起算。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

HTML / CSS 相关文章推荐
CSS3制作日历实现代码
Jan 21 HTML / CSS
CSS3网格的三个新特性详解
Apr 04 HTML / CSS
详解CSS3中Media Queries的相关使用
Jul 17 HTML / CSS
CSS3关于z-index不生效问题的解决
Feb 19 HTML / CSS
HTML5实现QQ聊天气泡效果
Jun 26 HTML / CSS
详解Html5 Canvas画线有毛边解决方法
Mar 01 HTML / CSS
html5 兼容IE6结构的实现代码
May 14 HTML / CSS
HTML5中如何显示视频呢 HTML5视频播放demo
Jun 08 HTML / CSS
html5使用canvas绘制一张图片
Dec 15 HTML / CSS
html5本地存储 localStorage操作使用详解
Sep 20 HTML / CSS
AmazeUI 加载进度条的实现示例
Aug 20 HTML / CSS
基于HTML十秒做出淘宝页面
Oct 24 HTML / CSS
利用html5 canvas动态画饼状图的示例代码
Apr 02 #HTML / CSS
简单聊聊H5的pushState与replaceState的用法
Apr 03 #HTML / CSS
如何使用localstorage代替cookie实现跨域共享数据问题
Apr 18 #HTML / CSS
Html5 localStorage入门教程
Apr 26 #HTML / CSS
在HTML5 canvas里用卷积核进行图像处理的方法
May 02 #HTML / CSS
HTML5新增的标签和属性归纳总结
May 02 #HTML / CSS
HTML5 video视频字幕的使用和制作方法
May 03 #HTML / CSS
You might like
PHP读写文件的方法(生成HTML)
2006/11/27 PHP
thinkphp3.0 模板中函数的使用
2012/11/13 PHP
phpMyAdmin自动登录和取消自动登录的配置方法
2014/05/12 PHP
php实现在服务器端调整图片大小的方法
2015/06/16 PHP
PHP之图片上传类实例代码(加了缩略图)
2016/06/30 PHP
php实现头像上传预览功能
2017/04/27 PHP
js removeChild 障眼法 可能出现的错误
2009/10/06 Javascript
jquery实现滑动图片自己测试的例子
2013/11/05 Javascript
jQuery中的val()示例应用
2014/02/26 Javascript
JavaScript 学习笔记之数据类型
2015/01/14 Javascript
jQuery实现平滑滚动页面到指定锚点链接的方法
2015/07/15 Javascript
JS创建事件的三种方法(实例代码)
2016/05/12 Javascript
AngularJs定制样式插入到ueditor中的问题小结
2016/08/01 Javascript
解析JavaScript模仿块级作用域
2016/12/29 Javascript
JavaScript函数节流和函数防抖之间的区别
2017/02/15 Javascript
Vue 实现前端权限控制的示例代码
2019/07/09 Javascript
javascript代码实现简易计算器
2021/01/25 Javascript
[55:25]2018DOTA2亚洲邀请赛3月29日 小组赛A组 VG VS OG
2018/03/30 DOTA
Python中使用hashlib模块处理算法的教程
2015/04/28 Python
Python实现基本数据结构中栈的操作示例
2017/12/04 Python
django框架面向对象ORM模型继承用法实例分析
2019/07/29 Python
将Python文件打包成.EXE可执行文件的方法
2019/08/11 Python
Python hashlib加密模块常用方法解析
2019/12/18 Python
Windows 下更改 jupyterlab 默认启动位置的教程详解
2020/05/18 Python
Python必须了解的35个关键词
2020/07/16 Python
Python基础教程(一)——Windows搭建开发Python开发环境
2020/07/20 Python
Pytorch1.5.1版本安装的方法步骤
2020/12/31 Python
阿里云:Aliyun.com
2017/02/15 全球购物
香港卓悦化妆品官网:BONJOUR
2017/09/21 全球购物
自我评价200字分享
2013/12/17 职场文书
优秀民警事迹材料
2014/01/29 职场文书
乡镇爱国卫生月活动总结
2014/06/25 职场文书
优秀共产党员推荐材料
2014/12/18 职场文书
火烧圆明园的观后感
2015/06/03 职场文书
个人房屋租赁合同(标准范本)
2019/09/16 职场文书
《攀登者》:“海拔8000米以上,你不能指望任何人”
2019/11/25 职场文书