Răsfoiți Sursa

🐛 fix(files): improve MinIO error handling for object operations

- 优化对象存在性检查逻辑,增加对MinIO S3Error类型的NotFound错误码处理
- 增强删除操作的错误处理,当对象不存在时记录日志并正常返回
- 扩展错误消息匹配模式,同时支持"not found"和"does not exist"两种错误提示
yourname 3 luni în urmă
părinte
comite
517f83323a
1 a modificat fișierele cu 16 adăugiri și 1 ștergeri
  1. 16 1
      packages/server/src/modules/files/minio.service.ts

+ 16 - 1
packages/server/src/modules/files/minio.service.ts

@@ -215,7 +215,12 @@ export class MinioService {
       await this.client.statObject(bucketName, objectName);
       return true;
     } catch (error) {
-      if ((error as Error).message.includes('not found')) {
+      // 处理MinIO S3Error
+      if (error && typeof error === 'object' && 'code' in error && error.code === 'NotFound') {
+        return false;
+      }
+      // 处理其他类型的错误消息
+      if ((error as Error).message.includes('not found') || (error as Error).message.includes('does not exist')) {
         return false;
       }
       logger.error(`Error checking existence of object ${bucketName}/${objectName}:`, error);
@@ -229,6 +234,16 @@ export class MinioService {
       await this.client.removeObject(bucketName, objectName);
       logger.db(`Deleted object: ${bucketName}/${objectName}`);
     } catch (error) {
+      // 处理MinIO S3Error
+      if (error && typeof error === 'object' && 'code' in error && error.code === 'NotFound') {
+        logger.error(`Object not found in MinIO during deletion: ${bucketName}/${objectName}`);
+        return;
+      }
+      // 处理其他类型的错误消息
+      if ((error as Error).message.includes('not found') || (error as Error).message.includes('does not exist')) {
+        logger.error(`Object not found in MinIO during deletion: ${bucketName}/${objectName}`);
+        return;
+      }
       logger.error(`Failed to delete object ${bucketName}/${objectName}:`, error);
       throw error;
     }