HTML5实现拖拽批量上传文件的代码


本文摘自PHP中文网,作者小云云,侵删。

本文主要和大家分享HTML5实现拖拽批量上传文件的代码,该组件基于 Vue.js 实现,UI 框架是 elementUI,完整的 demo 地址在https://github.com/Msxiaoma/upload-folder. 拖拽上传文件夹(仅仅chrome支持)。

一、组件描述

  1. 同时拖拽多个文件夹

  2. 删除指定文件夹

  3. 显示当前文件夹的上传进度条

  4. 超过5M的文件夹分片上传

效果如下:

二、遇到的问题

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

  2. 如何显示当前上传的文件夹的进度条

  3. 上传文件时跨域携带 cookie

  4. 文件夹分片

三、解决过程

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

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

// 拖拽文件夹

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. 上传文件夹的进度条

阅读剩余部分

相关阅读 >>

jquery实现带弹窗和次数的转盘抽奖(代码)

详解HTML5头部meta标签的功能

HTML5 meter标签是什么意思?HTML5 meter度量衡如何改变颜色详解

如何学习HTML5

recorder.js 基于 HTML5 实现录音功能

HTML5的学习路线分析

HTML5和flash的区别有哪些

h5实现文本框提示语的代码实例

HTML5新增标签总结

HTML5中浏览器是否能播放指定的音频/视频类型的方法canplaytype()

更多相关阅读请进入《HTML5》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...