big-file-up
Version:
big-file-up是一款大文件上传的插件
271 lines (270 loc) • 6.12 kB
TypeScript
/**
* 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 {};