0.1.2 • Published 5 years ago
reche v0.1.2
Reche
文件分片断点上传
安装
直接引用
<script src="./reche.js"></script>使用 npm 安装
npm install reche --save快速开始
在html中引入
<link href="https://cdn.bootcss.com/twitter-bootstrap/4.4.1/css/bootstrap.min.css">
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
<script src="https://cdn.bootcss.com/twitter-bootstrap/4.4.1/js/bootstrap.min.js"></script>
<script src="./reche.js"></script>
<div>
<div class="col">
<input type="file" class="custom-file-input" multiple id="file">
<label class="custom-file-label" for="file">选择文件</label>
</div>
<div class="col">
<button type="button" id="upload" class="btn btn-primary">点击上传</button>
</div>
</div>在js中调用
let reche = new Reche({
chunkPath: 'http://192.168.1.7:8082/v1/user/file/uploadChunkFile',
path: 'http://192.168.1.7:8082/v1/user/file/upload',
});
$("#upload").click(function(){
let fileInput = document.querySelector("#file");
reche.reche({
files: fileInput.files,
})
})vue、react
import Reche from 'reche';
let r = new Reche(Object);
r.reche(Object);配置项
option
| 名称 | 默认值 | 描述 |
|---|---|---|
| chunkUse | Boolean true | 是否开启分片上传 默认开启 |
| chunkSize | Number 5 << 20 (5M) | 分片大小 默认5M |
| chunkUseSize | Number 10 << 20 (10M) | 使用分片上传时文件最小大小 默认10M |
| path | String '' | 普通文件上传接口 |
| chunkPath | String '' | 分片上传接口 |
| timeout | Number 1000 60 60 | 请求超时时间 默认1小时 |
| chunkThreadNumber | Number 5 | 分片上传时开启的任务数(目前仅实现单任务,暂不可用) |
| chunkFirstResParamKey | Object(#chunkFirstResParamKey) | 分配上传时第一片上传完成返回的数据中需要回传的参数key |
| lang | String 'zh-cn' | 语言 |
| async | Boolean true | 是否开启异步(设置为false将监听不到上传进度) |
| headers | Object(#headers) | 设置自定义请求头 |
| fdKey | Object(#fdKey) | 设置分片上传字段的自定义key |
chunkFirstResParamKey
- 分配上传时第一片上传完成返回的数据中需要回传的参数key
- 默认为:
chunkFirstResParamKey = {
uploadIdKey: 'uploadId',
fileNameKey: 'fileName'
};headers
- 设置用自定义的请求头
- 默认为空对象{}
fdKey
//默认配置
fdKey = {
fileKey: 'file',//文件(片)的key
chunkKey:'chunk',//当前片数索引key
chunksKey:'chunks',//总片数key
fileNameKey:'fileName',//文件名的key
fileChunkSizeKey:"fileChunkSize",//文件块大小key
totalSizeKey:"totalSize",//文件总大小key
};
//可自定义,如:
fdKey={
fileKey: 'file_obj',
chunkKey:'chunk_index',
chunksKey:'chunks_number',
fileNameKey:'file_name',
}fileMap对象
fileMap对象由Reche实例化后返回
let reche = new Reche({});
let fileMap = reche.fileMap;- 文件id为8位随机字符串,不会在上传任务中重复
- file与fileChunk只有一个有值
- netSpeed、status、progress会实时改变
fileMap = {
3o8AlUdO:{
fileId: "3o8AlUdO" //文件id
fileName: "a0cb02df35894384b2d12822fdaa6e87.PNG" //文件名
fileSize: 2527 //文件大小(byte)
netSpeed: "23.50Kb/秒" //文件上传实时网速
file: File //文件
data: Object //上传时的自定义参数
resParam: null //回传参数
status: 2 //文件实时状态
progress: 1 //文件实时上传进度
fileChunk: Array(0) //文件块
}
...
...
...
}文件状态
reche.fileStatus = {
onWaiting: 0,//等待中
onProgress: 1,//上传中
onCompleted: 2,//已完成
onStopped: 3,//已暂停
onError: 4,//上传失败
onCanceled: 5//已取消
}API
reche.reche(option:Object):上传文件主入口
option = {
files: File, //从表单中获取的原生文件
data: {} //自定义的其他上传参数
}reche.stop(fileId:String)- 停止某个上传任务
- fileStatus 为 0 或 1 时可用
reche.resume(fileId:String)- 继续某个上传任务
- fileStatus 为 3 时可用
reche.remove(fileId:String)- 删除某个上传任务
- fileStatus 为 2 、4 或 5 时可用
reche.cancel(fileId:String)- 取消某个上传任务
- fileStatus 为 0 、 1 或 3 时可用
reche.restart(fileId:String)- 重新开始某个上传任务
- fileStatus 为 4 或 5 时可用
reche.on(name:String, callback:Function)
事件监听
可监听的事件列表,所有回调只有一个参数 event:Object
recheEvents = [
"fileStop",//文件上传暂停
"fileResume",//文件继续上传
"fileCancel",//文件取消上传
"fileRestart",//文件重新上传
"fileRemove",//文件移除
"fileRemoveAll",//文件全部移除
"fileAppend",//文件添加到任务列表
"fileCompleteAll",//本次选择的文件上传任务全部完成
"fileProgress",//文件上传进度改变
"fileStatusChange",//文件状态改变
"fileError"//文件上传失败
]reche.on('fileStop',callBack):当调用stop()方法成功时触发- event.fileId
event.event
reche.on('fileResume',callBack):当调用resume()方法成功时触发- event.fileId
- event.event
reche.on('fileCancel',callBack):当调用cancel()方法成功时触发- event.fileId
event.event
reche.on('fileRestart',callBack):当调用restart()方法成功时触发- event.fileId
event.event
reche.on('fileRemove',callBack):当调用remove()方法成功时触发- event.fileId
- event.event
reche.on('fileAppend',callBack):当调用reche()方法成功时触发- event.fileId
- event.event
- event.fileMap
reche.on('fileCompleteAll',callBack):所有文件传完成功时触发- event.response
event.event
reche.on('fileProgress',callBack):由xhr原生进度事件触发- event.fileId
- event.event
- event.netSpeed
- event.progress
reche.on('fileStatusChange',callBack)- event.fileId
- event.event
event.status
reche.on('fileError',callBack):文件上传失败,包括请求失败和服务器返回错误- event.fileId
- event.event
- event.xhr