0.1.2 • Published 4 years ago

reche v0.1.2

Weekly downloads
4
License
MIT
Repository
github
Last release
4 years ago

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

名称默认值描述
chunkUseBoolean true是否开启分片上传 默认开启
chunkSizeNumber 5 << 20 (5M)分片大小 默认5M
chunkUseSizeNumber 10 << 20 (10M)使用分片上传时文件最小大小 默认10M
pathString ''普通文件上传接口
chunkPathString ''分片上传接口
timeoutNumber 1000 60 60请求超时时间 默认1小时
chunkThreadNumberNumber 5分片上传时开启的任务数(目前仅实现单任务,暂不可用)
chunkFirstResParamKeyObject(#chunkFirstResParamKey)分配上传时第一片上传完成返回的数据中需要回传的参数key
langString 'zh-cn'语言
asyncBoolean true是否开启异步(设置为false将监听不到上传进度)
headersObject(#headers)设置自定义请求头
fdKeyObject(#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)

    • 停止某个上传任务
    • fileStatus01 时可用
  • reche.resume(fileId:String)

    • 继续某个上传任务
    • fileStatus3 时可用
  • reche.remove(fileId:String)

    • 删除某个上传任务
    • fileStatus245 时可用
  • reche.cancel(fileId:String)

    • 取消某个上传任务
    • fileStatus013 时可用
  • reche.restart(fileId:String)

    • 重新开始某个上传任务
    • fileStatus45 时可用
  • 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
0.1.2

4 years ago

0.1.0

4 years ago

0.1.1

4 years ago

0.0.9

4 years ago

0.0.8

4 years ago

0.0.7

4 years ago

0.0.6

4 years ago

0.0.5

4 years ago

0.0.4

4 years ago

0.0.3

4 years ago

0.0.2

4 years ago

0.0.1

4 years ago