simple-uploader.js 上传组件

2021-09-02  本文已影响0人  逸笛

simple-uploader.js(也称 Uploader)是一个上传库,支持多并发上传,文件夹、拖拽、可暂停继续、秒传、分块上传、出错自动重传、手工重传、进度、剩余时间、上传速度等特性;该上传库依赖 HTML5 File API。由于是分块上传,所以依赖文件的分块 API,所以受限于此浏览器支持程度为:Firefox 4+, Chrome 11+, Safari 6+ and Internet Explorer 10+。

Fork flow.js,但是进行了重构。

默认提供了一个 Node.js 的示例,放在 samples/ 目录下。

相比 flow.js 的新特性

特点

安装

npm install simple-uploader.js

使用

创建一个 Uploader 实例:

var uploader = new Uploader({
  target: '/api/photo/redeem-upload-token', 
  query: { upload_token: 'my_token' }
})
// 如果不支持 需要降级的地方
if (!uploader.support) location.href = '/some-old-crappy-uploader'

如果想要选择文件或者拖拽文件的话,你可以通过如下两个 API 来指定哪些 DOM 节点:

uploader.assignBrowse(document.getElementById('browseButton'))
uploader.assignDrop(document.getElementById('dropTarget'))

实例化后你还可以选择监听一些事件:

// 文件添加 单个文件
uploader.on('fileAdded', function (file, event) {
  console.log(file, event)
})
// 单个文件上传成功
uploader.on('fileSuccess', function (rootFile, file, message) {
  console.log(rootFile, file, message)
})
// 根下的单个文件(文件夹)上传完成
uploader.on('fileComplete', function (rootFile) {
  console.log(rootFile)
})
// 某个文件上传失败了
uploader.on('fileError', function (rootFile, file, message) {
  console.log(rootFile, file, message)
})

服务端如何接受呢?

因为在前端做了一些分块啊等处理,所以也需要服务端做一些特殊处理,这个可以参考 samples/Node.js/ 实现。

每一个上传块都会包含如下分块信息:

一个分块可以被上传多次,当然这肯定不是标准行为,但是在实际上传过程中是可能发生这种事情的,这种重传也是本库的特性之一。

对于每个请求的响应码你都可以根据 successStatusespermanentErrors 配置项是否是认为成功或失败的:

处理 GET (或者 test() 请求)

如果说 testChunks 配置项是 true 的话,就可以实现秒传、或者刷新页面后、或者重启浏览器、甚至是跨浏览器还可以继续上传的效果,所有的上传必备的参数数据都会被一并发出:

所以有了以上的支持,服务端就可以根据预先发的这个请求来决定是否需要上传这个块内容,所以也就实现了秒传或者跨浏览器上传特性。

API 文档

Uploader

配置

实例化的时候可以传入配置项:

var r = new Uploader({ opt1: 'val', ...})

支持的配置项:

属性

方法

事件

Uploader.File

属性

如果不是文件夹的话,那么还会有如下属性:

方法

simple-uploader.js 是 FORK 的 https://github.com/flowjs/flow.js 的,参考了 https://github.com/23/resumable.js

Github 地址:https://github.com/simple-uploader/Uploader

上一篇下一篇

猜你喜欢

热点阅读