diff --git a/src/components/UploadFile/src/useUpload.ts b/src/components/UploadFile/src/useUpload.ts index dddd15961..a50c58fed 100644 --- a/src/components/UploadFile/src/useUpload.ts +++ b/src/components/UploadFile/src/useUpload.ts @@ -5,6 +5,7 @@ import { UploadProgressEvent } from 'element-plus/es/components/upload/src/upload' import axios, { AxiosProgressEvent } from 'axios' +import { config } from '@/config/axios/config' /** * 获得上传 URL @@ -33,6 +34,7 @@ export const useUpload = (directory?: string) => { const fileName = options.file.name || options.filename // 1.2 获取文件预签名地址 const presignedInfo = await FileApi.getFilePresignedUrl(fileName, directory) + const fileAccessUrl = buildFileAccessUrl(presignedInfo.configId, presignedInfo.path) // 1.3 上传文件(不能使用 ElUpload 的 ajaxUpload 方法的原因:其使用的是 FormData 上传,Minio 不支持) return axios .put(presignedInfo.uploadUrl, options.file, { @@ -41,11 +43,11 @@ export const useUpload = (directory?: string) => { }, onUploadProgress: uploadProgressHandler }) - .then(() => { + .then(async () => { // 1.4. 记录文件信息到后端(异步) - createFile(presignedInfo, options.file, fileName) + await createFile(presignedInfo, options.file, fileName, fileAccessUrl) // 通知成功,数据格式保持与后端上传的返回结果一致 - return { data: presignedInfo.url } + return { data: fileAccessUrl } }) } else { // 模式二:后端上传 @@ -78,17 +80,26 @@ export const useUpload = (directory?: string) => { * @param file 文件 * @param fileName */ -function createFile(vo: FileApi.FilePresignedUrlRespVO, file: UploadRawFile, fileName: string) { +function createFile( + vo: FileApi.FilePresignedUrlRespVO, + file: UploadRawFile, + fileName: string, + url: string +) { const fileVo = { configId: vo.configId, - url: vo.url, + url, path: vo.path, name: fileName, type: file.type || 'application/octet-stream', size: file.size } - FileApi.createFile(fileVo) - return fileVo + return FileApi.createFile(fileVo) +} + +function buildFileAccessUrl(configId: number, path: string) { + const base = window.location.origin + config.base_url + return `${base}/infra/file/${configId}/get/${encodeURI(path)}` } /**