Bladeren bron

♻️ refactor(minio): 优化MinIO上传工具代码结构

- 移除重复的Taro引用和小程序环境检测代码
- 修改uploadFile接口返回的fileId获取方式,统一从result.fileId获取
- 优化readFileSlice方法的返回类型处理,确保返回ArrayBuffer类型
- 修复文件上传成功后fileId的获取路径问题
yourname 4 maanden geleden
bovenliggende
commit
f32342ff97
1 gewijzigde bestanden met toevoegingen van 17 en 15 verwijderingen
  1. 17 15
      mini/src/utils/minio.ts

+ 17 - 15
mini/src/utils/minio.ts

@@ -7,15 +7,6 @@ import Taro from '@tarojs/taro';
 const isMiniProgram = isWeapp();
 const isBrowser = isH5();
 
-
-if (isMiniProgram) {
-  try {
-    Taro = require('@tarojs/taro');
-  } catch (e) {
-    // 忽略错误,回退到原生小程序
-  }
-}
-
 export interface MinioProgressEvent {
   stage: 'uploading' | 'complete' | 'error';
   message: string;
@@ -131,7 +122,7 @@ export class MinIOXHRMultipartUploader {
     
     // 完成上传
     try {
-      await this.completeMultipartUpload(policy, key, uploadedParts);
+      const result = await this.completeMultipartUpload(policy, key, uploadedParts);
       
       callbacks?.onProgress?.({
         stage: 'complete',
@@ -145,7 +136,7 @@ export class MinIOXHRMultipartUploader {
         fileUrl: `${policy.host}/${key}`,
         fileKey: key,
         bucketName: policy.bucket,
-        fileId: result.file.id
+        fileId: result.fileId
       };
     } catch (error) {
       callbacks?.onError?.(error instanceof Error ? error : new Error(String(error)));
@@ -288,7 +279,7 @@ export class MinIOXHRUploader {
             fileUrl: `${policy.uploadPolicy.host}/${key}`,
             fileKey: key,
             bucketName: policy.uploadPolicy.bucket,
-            fileId: result.file.id
+            fileId: policy.file.id
           });
         } else {
           const error = new Error(`上传失败: ${xhr.status} ${xhr.statusText}`);
@@ -438,7 +429,7 @@ export class TaroMinIOMultipartUploader {
   }
   
   // 读取文件片段
-  private static async readFileSlice(filePath: string, start: number, end: number): Promise<string | ArrayBuffer> {
+  private static async readFileSlice(filePath: string, start: number, end: number): Promise<ArrayBuffer> {
     return new Promise((resolve, reject) => {
       try {
         const fs = Taro?.getFileSystemManager?.();
@@ -447,8 +438,19 @@ export class TaroMinIOMultipartUploader {
           return;
         }
         
-        const fileData = fs.readFileSync(filePath, undefined, start, end - start );
-        resolve(fileData);
+        const fileData = fs.readFileSync(filePath, undefined, start, end - start);
+        
+        // 确保返回 ArrayBuffer 类型
+        if (typeof fileData === 'string') {
+          // 将字符串转换为 ArrayBuffer
+          const encoder = new TextEncoder();
+          resolve(encoder.encode(fileData).buffer);
+        } else if (fileData instanceof ArrayBuffer) {
+          resolve(fileData);
+        } else {
+          // 处理其他可能的数据类型
+          reject(new Error('文件数据类型不支持'));
+        }
       } catch (error) {
         reject(error);
       }