Skip to content

一款前端原生分片上传文件插件,支持进度计算,队列提交,MD5校验

Notifications You must be signed in to change notification settings

8696/simple-upload-slice-file

Folders and files

NameName
Last commit message
Last commit date

Latest commit

author
longjinwen
Feb 22, 2020
70f537a · Feb 22, 2020

History

18 Commits
Jan 9, 2020
Feb 21, 2020
Jan 9, 2020
Jan 5, 2020
Jan 5, 2020
Dec 6, 2018
Jan 4, 2020
Dec 6, 2018
Jan 4, 2020
Feb 22, 2020
Jan 9, 2020
Jan 5, 2020

Repository files navigation

Simple upload slice file

项目介绍

一款前端简单的分片上传文件小项目,不依赖jQuery,解决大文件上传过久,网络不稳定导致前功尽弃的问题。支持如下:

  • 设置切片大小
  • 进度计算
  • 队列提交
  • 队列控制
  • MD5校验
  • IE10及其他主流浏览器(因使用原生FormData对象)

历史版本

1.x

安装

(c)npm install simple-upload-slice-file -D

演示

1. (c)npm install
2. node server/app.js

使用

Browser
    <script src="dist/simple-upload-slice-file.min.js"></script>

    new SimpleUploadSliceFile({
      //
      url: 'http://127.0.0.1:3000/upload',
      // 队列延迟发送,可用于调试,默认0(ms)
      delay: 0,
      // 切片大小(M),建议不要太小,默认10
      chunkSile: 20,
    })
      .appendHeader({
        header1: 'header 1',
      })
      .appendHeader({
        header2: 'header 2',
      })
      .appendData({
        data1: 'data 1',
      })
      .appendData({
        data2: 'data 12',
      })
      .addFile('file', document.querySelector('#file'))
      // .addFile('file', document.querySelector('#file')['files'])
      // .addFile('file', $('#file'))
      // .addFile('file', document.querySelector('#file')['files'][0])
      .addCallBack({
        // 上传进度
        progress: function (progress) {
          console.log('上传进度:' + progress);
        },
        // 每个切片完成后的回调,2.x由手动判断是否允许下一块进行提交,增加了灵活性
        sliceResponse: function (xhr, taskParam, queue) {
          // 原生 xhr 对象,根据对象信息判断是否进行下一个队列,status为4才回调
          // console.log('xhr');
          // console.log(xhr);
          // 任务参数
          // console.log('taskParam');
          // console.log(taskParam);
          // console.log('queue');
          // console.log(queue);
          // queue 使用方法 https://github.com/8696/js-queue
          // 例1:
          if (xhr.status === 200) {
            var responseData = typeof xhr.responseText === 'string' ? JSON.parse(xhr.responseText) : xhr.responseText;
            if (responseData.code === 0) {
              // 继续提交
              queue.next();
            } else {
              // 重新提交当前块
              queue.again();
            }
          } else {
            // 重新提交当前块
            queue.again();
          }
        },
        // 队列中的最后一次响应
        lastResponse: function (data, taskParam) {
          console.log(data);
        }
      })
      .send();

    // 获取 MD5
    SimpleUploadSliceFile.getMD5({
      // file: $('#file'),
      // file: document.querySelector('#file'),
      // file:document.querySelector('#file')['files'],
      file: document.querySelector('#file')['files'][0],
      success: function (res) {
        console.log('md5:');
        console.log(res);
      },
      progress: function (res) {
        // console.log(res);
      },
      complete: function (res) {
        // console.log(res);
      },
      error: function (res) {
        // console.log(res);
      }
    });
    /**
      * 在请求地址 query 中会自动携带文件上传信息,server/app.js 中提供演示文件
      * task-order: 15    -> 当前切片中的块号,从 1 开始
        task-size-range: 146800640-157286400   -> 当前切片的在文件中的大小范围 
        task-total-slice: 24    -> 总切片数 / 块数
        task-total-size: 249456695    -> 文件总大小
        task-i: SuX6xxxxx06889    -> 当前文件任务 ID 
        task-size: 10485760     -> 当前切片的大小
      *
      */
vue
    import SimpleUploadSliceFile from 'simple-upload-slice-file';
    
    new SimpleUploadSliceFile.addFile().send();

About

一款前端原生分片上传文件插件,支持进度计算,队列提交,MD5校验

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published