UNPKG

big-file-up

Version:

big-file-up是一款大文件上传的插件

271 lines (270 loc) 6.12 kB
/** * message:错误时会通过fail函数返回该提示信息 string; * filepath:成功时返回的文件地址 string; * isExist:是否检查到有同样的文件,直接秒传成功 Boolean; * uploaded:上传成功的部分,返回的第几片,如[1,2]代表第1、2片已被上传过 Array<number>; */ type ResponseApi = { /** * 返回的文件地址 */ filepath?: string; /** * 是否检查到有同样的文件,直接秒传成功 */ isExist?: Boolean; /** * 上传成功的部分,返回的第几片,如[1,2]代表第1、2片已被上传过 */ uploaded?: Array<number>; } | false; interface changeDataApi { type: 'state' | 'schedule'; file: File; state: stateType; schedule: number; } interface paramsApi { /** * 需要上传的文件 */ file: File | Array<File>; /** * 是否自动上传 */ auto?: Boolean; /** * 每次上传的文件大小,单位:M * 默认2M */ size?: number; /** * 是否开启秒传 */ fast?: Boolean; /** * 快速验证地址 */ checkUrl?: string; /** * 上传地址 */ upUrl: string; /** * 合并地址 */ mergeUrl: string; /** * 总的并发数 * 不能小于maxCount的整数 * 默认3个 */ requestNum?: number; /** * 请求前的操作 */ requestBefore?: (...ags: any[]) => any[]; /** * 请求头 */ requestHeaders?: Record<string, any>; /** * 成功完成函数 * @param url 成功的 * @returns */ success?: (data: { file: File; url: string; }) => void; /** * 错误函数 * @param message 错误信息 * @returns */ fail?: (error: { file?: File; message: string; }) => void; /** * 统一请求返回函数处理,返回特定的值 * @param response * @returns ResponseApi */ response?: (response: any, file: File) => ResponseApi; /** * 状态或者进度变化 * @param data {type:状态还是进度,state:当前状态,schedule:当前上传进度(上传数/总数)} */ change?: (data: changeDataApi) => void; } export interface fileMsgObjApi { /** * 当前文件上传进度 */ schedule: number; /** * 当前文件上传状态 */ state: stateType; /** * 并发数 */ requestNum: number; /** * 总共分成多少片 */ totalChunks: number; /** * 每片的md5值 */ identifiers?: Array<string>; /** * 当前正在上传的 */ index: number; /** * 文件名字后缀 */ suffix: string; /** * 文件分片后每片的信息 * key为上传的第几片 * status: wait:等待,loading:正在上传中,success:成功,error:失败 */ fileObj: fileObjApi; /** * 上传文件的请求,方便后面暂停之类的 顺序分别对应,如第一个:{1:()=>{}} */ stopFnObj: Record<string, () => {}>; /** * 优先级,分别对应高|中|低 */ priority: priorityType; } /** * 文件分片后每片的信息 */ interface fileObjApi { [key: string]: { /** * 当前片的上传状态 */ status: statusType; /** * 当前片的md5 */ identifier?: string; blob: Blob; }; } export interface changeFileRequestNumObj { high: Array<fileMsgObjApi>; middle: Array<fileMsgObjApi>; low: Array<fileMsgObjApi>; } type priorityType = 'high' | 'middle' | 'low'; type statusType = 'wait' | 'loading' | 'success' | 'error'; type stateType = "" | "start" | "stop" | "wait" | "success"; export declare class BigFileUp { #private; /** * 文件上传的信息集合 */ private fileMsgObj; private fileList; private checkUrl; private upUrl; private mergeUrl; /** * 最大同时上传几个文件 */ private maxCount; /** * 当前在上传中的文件有几个 * 最多maxCount个 */ private requestFileList; /** * 总的请求数 * 不能小于maxCount的整数,保证全部开启时至少能分到一个 */ private requestNum; /** * 每个上传多大的文件,单位:M */ private size; /** * 是否开启自动上传 * 默认:true */ private auto; /** * 是否开启秒传 */ private fast; /** * 跟优先级分配比例有关 */ private multiple; /** * 请求头 */ private requestHeaders; constructor(params: paramsApi); /** * 开始某一个 */ start(file: File): void; /** * 全部开始 */ startAll(): void; /** * 暂停某个 * @param file */ stop(file: File): void; /** * 全部暂停 */ stopAll(): void; /** * 请求前对请求体的操作 * @param ags * @returns */ private requestBefore; private response; /** * 触发错误的函数 * @param message 错误提示信息 * @param file 上传文件中失败的提示就要带此参数 */ error(message: string, file?: File): void; /** * 外部需要传进来的,触发成功函数 */ private success; /** * 外部需要传进来的,失败的 * @param message */ private fail; /** * 状态或者进度变化 * @param data {type:状态还是进度,state:当前状态,schedule:当前上传进度(上传数/总数)} */ private change; setRequestHeaders(headers: Record<string, any>): void; setResponse(response: (data: any, file: File) => ResponseApi): void; /** * 设置优先级 * @param list {file:文件,priority:'high'|'middle'|'low'} */ setPriority(list: Array<{ file: File; priority: priorityType; }>): void; } export {};