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代码实现switch滑动开关按钮效果
Aug 30 HTML / CSS
CSS实现圆形放大镜狙击镜效果 只有圆圈里的放大
Dec 10 HTML / CSS
详解CSS3中@media的实际使用
Aug 04 HTML / CSS
详解CSS3选择器:nth-child和:nth-of-type之间的差异
Sep 18 HTML / CSS
CSS3中媒体查询结合rem布局适配手机屏幕
Jun 10 HTML / CSS
简单聊聊H5的pushState与replaceState的用法
Apr 03 HTML / CSS
html5中如何将图片的绝对路径转换成文件对象
Jan 11 HTML / CSS
HTML5所有标签汇总及标签意义解释
Mar 12 HTML / CSS
基于Html5 canvas实现裁剪图片和马赛克功能及又拍云上传图片 功能
Jul 09 HTML / CSS
3种方式实现瀑布流布局小结
Sep 05 HTML / CSS
HTML5 body设置全屏背景图片的示例代码
Dec 08 HTML / CSS
CSS3 天气图标动画效果
Apr 06 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
用户的详细注册和判断
2006/10/09 PHP
PHP+MySQL实现无极限分类栏目的方法
2015/12/23 PHP
PHP模板引擎Smarty内建函数section,sectionelse用法详解
2016/04/11 PHP
PHP利用Mysql锁解决高并发的方法
2018/09/04 PHP
laravel框架邮箱认证实现方法详解
2019/11/22 PHP
php判断数组是否为空的实例方法
2020/05/10 PHP
JavaScript的变量作用域深入理解
2009/10/25 Javascript
JS图片无缝滚动(简单利于使用)
2013/06/17 Javascript
在js文件中如何获取basePath处理js路径问题
2013/07/10 Javascript
jQuery学习笔记之jQuery.extend(),jQuery.fn.extend()分析
2014/06/09 Javascript
jquery validate demo 基础
2015/10/29 Javascript
JSON键值对序列化和反序列化解析
2017/01/24 Javascript
js中setTimeout的妙用--防止循环超时
2017/03/06 Javascript
MvcPager分页控件 适用于Bootstrap
2017/06/03 Javascript
jQuery 实现图片的依次加载图片功能
2017/07/06 jQuery
JS实现前端缓存的方法
2017/09/21 Javascript
vue数据传递--我有特殊的实现技巧
2018/03/20 Javascript
webpack4.x打包过程详解
2018/07/18 Javascript
javacript replace 正则取字符串中的值并替换【推荐】
2018/09/13 Javascript
vue组件暴露和.js文件暴露接口操作
2020/08/11 Javascript
Python 文件和输入输出小结
2013/10/09 Python
Python读取和处理文件后缀为.sqlite的数据文件(实例讲解)
2017/06/27 Python
python爬虫之线程池和进程池功能与用法详解
2018/08/02 Python
python实现美团订单推送到测试环境,提供便利操作示例
2019/08/09 Python
python绘制规则网络图形实例
2019/12/09 Python
获取python运行输出的数据并解析存为dataFrame实例
2020/07/07 Python
html5标记文字_动力节点Java学院整理
2017/07/11 HTML / CSS
HTML如何让IMG自动适应DIV容器大小的实现方法
2020/02/25 HTML / CSS
国际知名设计师时装商店:Coggles
2016/09/05 全球购物
大学生两会学习心得体会
2014/03/10 职场文书
公司员工离职证明书
2014/10/04 职场文书
2015年办公室文员工作总结
2015/04/24 职场文书
十二生肖观后感
2015/06/12 职场文书
单位工作证明范本
2015/06/15 职场文书
新闻报道稿范文
2015/07/23 职场文书
Python何绘制带有背景色块的折线图
2022/04/23 Python