上传管理器

预计阅读时间: 2 分钟

createUploader - (function)

创建一个上传管理器, 支持并发上传, 可以调整并发的类型, 例如按分片并发, 或者按文件并发, 自动管理上传状态, 并且返回上传进度信息, 内部使用 fetch 实现文件上传, 可自行传递 headers 和 fetch 的配置, 并且支持通过函数自定义请求体

参数

必填参数名说明类型默认值
*optionsuploader 配置string
*options.url上传地址string
options.maxConcurrent最大并发数number3
options.concurrentNode并发节点类型'file'|'chunk''chunk'
options.chunkSize分片大小number1024 * 1024
options.dataType数据类型'FormData'|'binary''FormData'
options.dataKey数据 keystring'file'
options.responseType响应类型'json''json'
options.retryCount重试次数number3
options.requestMethod请求方法'POST''POST'
options.headers请求头Record<string, string>{}
options.bodyHandler自定义请求体TBodyHanderFunc-
options.headersHandler自定义请求体THeadersHandler-
options.bodyHandler自定义请求体TBodyHanderFunc-
forceCreate强制创建实例booleanfalse
类型补充
1type TBodyHanderFunc = (body: { chunk: Blob; chunkIdx: number; customOption: any }) => Record<string, any>;
2type THeadersHandler = (body: {
3  chunkIdx: number;
4  currentHeanders: Record<string, any>;
5  customOption: any;
6}) => Record<string, any> | Promise<Record<string, any>>;
警告

TBodyHanderFunc 禁止使用闭包 THeadersHanderFunc禁止使用闭包

返回值

UploadController 实例

实例类型声明

1type TFileLive = File | Blob | string;
2interface IUploadOptions {
3  onProgress?: (progressInfo: IProgressInfo) => void;
4  customOption?: any;
5}
6interface IUploadResult {
7  taskInfo: IUploadFinishInfo;
8  customOption: any;
9}
10interface IUploadFinishInfo {
11  status: 'finished';
12  message: string;
13  chunks: number[];
14  errorChunks: number[];
15}
16
17interface UploadController {
18  // 上传
19  upload(file: TFileLive, options?: IUploadOptions): Promise<IUploadResult>;
20  // 重试
21  retry(file: TFileLive, chunkIdxs?: number[], options?: IUploadOptions): Promise<IUploadResult>;
22  // 取消
23  abort(file: TFileLive): void;
24  // 清空
25  clear(): void;
26  // 关闭
27  close(): void;
28}