56 lines
1.5 KiB
TypeScript
56 lines
1.5 KiB
TypeScript
import { SYSTEM_SERVICE_PREFIX } from '@/constants/service';
|
||
import { request } from '../request';
|
||
|
||
const FILE_PREFIX = `${SYSTEM_SERVICE_PREFIX}/file`;
|
||
|
||
export interface UploadFileResult {
|
||
/** infra_file.id 的字符串形式(避免 Long 精度丢失) */
|
||
id: string;
|
||
/** 文件访问 URL:私有桶带签名、公开桶裸 URL */
|
||
url: string;
|
||
}
|
||
|
||
/** 上传文件(模式一:后端中转) */
|
||
export function uploadFile(file: File, directory?: string) {
|
||
const formData = new FormData();
|
||
formData.append('file', file);
|
||
if (directory) {
|
||
formData.append('directory', directory);
|
||
}
|
||
|
||
return request<UploadFileResult>({
|
||
url: `${FILE_PREFIX}/upload`,
|
||
method: 'post',
|
||
data: formData
|
||
});
|
||
}
|
||
|
||
/**
|
||
* 删除文件
|
||
*
|
||
* 业务表单"取消/关闭/标记删除"场景调用本接口清理孤儿文件。
|
||
* 删除已不存在的文件(后端返回错误码 `1001003001`)应由调用方视为成功并吞掉。
|
||
*/
|
||
export function deleteFile(id: string) {
|
||
return request<boolean>({
|
||
url: `${FILE_PREFIX}/delete`,
|
||
method: 'delete',
|
||
params: { id }
|
||
});
|
||
}
|
||
|
||
/**
|
||
* 下载文件(流)
|
||
*
|
||
* 走后端代理接口 `/system/file/download?id=xxx`,由后端读取对象存储并以字节流返回。
|
||
* 私有桶下不要直接打开 `infra_file.url`,签名地址会过期。
|
||
*/
|
||
export function downloadFile(id: string) {
|
||
return request<Blob, 'blob'>({
|
||
url: `${FILE_PREFIX}/download`,
|
||
method: 'get',
|
||
params: { id },
|
||
responseType: 'blob'
|
||
});
|
||
}
|