48 lines
1.1 KiB
TypeScript
48 lines
1.1 KiB
TypeScript
|
import type { AxiosRequestConfig } from '@vben/request';
|
||
|
|
||
|
import { requestClient } from '#/api/request';
|
||
|
|
||
|
/**
|
||
|
* Axios上传进度事件
|
||
|
*/
|
||
|
export type AxiosProgressEvent = AxiosRequestConfig['onUploadProgress'];
|
||
|
|
||
|
/**
|
||
|
* 默认上传结果
|
||
|
*/
|
||
|
export interface UploadResult {
|
||
|
url: string;
|
||
|
fileName: string;
|
||
|
ossId: string;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 通过单文件上传接口
|
||
|
* @param file 上传的文件
|
||
|
* @param options 一些配置项
|
||
|
* @param options.onUploadProgress 上传进度事件
|
||
|
* @param options.signal 上传取消信号
|
||
|
* @param options.otherData 其他请求参数 后端拓展可能会用到
|
||
|
* @returns 上传结果
|
||
|
*/
|
||
|
export function uploadApi(
|
||
|
file: Blob | File,
|
||
|
options?: {
|
||
|
onUploadProgress?: AxiosProgressEvent;
|
||
|
otherData?: Record<string, any>;
|
||
|
signal?: AbortSignal;
|
||
|
},
|
||
|
) {
|
||
|
const { onUploadProgress, signal, otherData = {} } = options ?? {};
|
||
|
return requestClient.upload<UploadResult>(
|
||
|
'/resource/oss/upload',
|
||
|
{ file, ...otherData },
|
||
|
{ onUploadProgress, signal, timeout: 60_000 },
|
||
|
);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 上传api type
|
||
|
*/
|
||
|
export type UploadApi = typeof uploadApi;
|