Przeglądaj źródła

基础设施:前端直连上传,优先使用自定义域名

owen 1 rok temu
rodzic
commit
89fdb5ced9

+ 3 - 1
src/api/infra/file/index.ts

@@ -10,7 +10,9 @@ export interface FilePageReqVO extends PageParam {
 export interface FilePresignedUrlRespVO {
   // 文件配置编号
   configId: number
-  // 文件预签名地址
+  // 文件上传 URL
+  uploadUrl: string
+  // 文件 URL
   url: string
 }
 

+ 7 - 9
src/components/UploadFile/src/useUpload.ts

@@ -19,11 +19,11 @@ export const useUpload = () => {
       // 1.2 获取文件预签名地址
       const presignedInfo = await FileApi.getFilePresignedUrl(fileName)
       // 1.3 上传文件(不能使用ElUpload的ajaxUpload方法的原因:其使用的是FormData上传,Minio不支持)
-      return axios.put(presignedInfo.url, options.file).then(() => {
+      return axios.put(presignedInfo.uploadUrl, options.file).then(() => {
         // 1.4. 记录文件信息到后端
-        const fileVo = createFile(presignedInfo.configId, fileName, presignedInfo.url, options.file)
+        createFile(presignedInfo, fileName, options.file)
         // 通知成功,数据格式保持与后端上传的返回结果一致
-        return { data: fileVo.url }
+        return { data: presignedInfo.url }
       })
     } else {
       // 模式二:后端上传(需要增加后端身份认证请求头)
@@ -42,17 +42,15 @@ export const useUpload = () => {
 
 /**
  * 创建文件信息
- * @param configId 文件配置编号
+ * @param vo 文件预签名信息
  * @param name 文件名称
- * @param url 文件地址
  * @param file 文件
  */
-function createFile(configId: number, name: string, url: string, file: UploadRawFile) {
+function createFile(vo: FileApi.FilePresignedUrlRespVO, name: string, file: UploadRawFile) {
   const fileVo = {
-    configId: configId,
+    configId: vo.configId,
+    url: vo.url,
     path: name,
-    // 移除预签名参数:参数只在上传时有用,查看时不需要
-    url: url.substring(0, url.indexOf('?')),
     name: file.name,
     type: file.type,
     size: file.size