From 5c2f353bfdaea493f043ea021c742f1b93bae46c Mon Sep 17 00:00:00 2001
From: liusuyi <1951119284@qq.com>
Date: Tue, 18 Nov 2025 14:40:28 +0800
Subject: [PATCH] 增加架次和媒体库同步

---
 ard-oss/src/main/java/com/ard/oss/service/impl/OssServiceContext.java |   58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 56 insertions(+), 2 deletions(-)

diff --git a/ard-oss/src/main/java/com/ard/oss/service/impl/OssServiceContext.java b/ard-oss/src/main/java/com/ard/oss/service/impl/OssServiceContext.java
index c3f7a89..e78de05 100644
--- a/ard-oss/src/main/java/com/ard/oss/service/impl/OssServiceContext.java
+++ b/ard-oss/src/main/java/com/ard/oss/service/impl/OssServiceContext.java
@@ -10,7 +10,9 @@
 import com.ard.oss.model.enums.OssTypeEnum;
 import com.ard.oss.service.IOssService;
 import io.minio.PutObjectArgs;
+import lombok.Cleanup;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 import org.springframework.web.multipart.MultipartFile;
@@ -87,7 +89,7 @@
      */
     public String upload(MultipartFile file) throws IOException {
         try {
-            return upload(OssConfiguration.bucket, null, file);
+            return upload(OssConfiguration.bucket, file);
         } catch (Exception e) {
             throw new IOException(e.getMessage(), e);
         }
@@ -130,8 +132,13 @@
                     ? extractFilename(file)
                     : object;
 
+            // 通过文件扩展名获取 MIME 类型
+            String contentType = getMimeTypeByExtension(file.getOriginalFilename());
+
+            @Cleanup
+            InputStream inputStream = file.getInputStream();
             // 上传文件到 Minio
-            this.ossService.putObject(bucket, objectName, file.getInputStream());
+            this.ossService.putObject(bucket, objectName, inputStream, contentType);
 
             // ✅ 拼接永久 URL(不带 presigned 过期参数)
             String baseUrl = OssConfiguration.endpoint;
@@ -161,5 +168,52 @@
             throw new RuntimeException("Upload failed: " + e.getMessage(), e);
         }
     }
+    @Async("threadPoolTaskExecutor")
+    public String upload(String bucket, String objectKey, InputStream input, String contentType) {
+        try {
+            // 上传文件时指定 Content-Type
+            this.ossService.putObject(bucket, objectKey, input, contentType);
+
+            // ✅ 构建永久访问 URL
+            String baseUrl = OssConfiguration.endpoint;
+            if (!baseUrl.endsWith("/")) {
+                baseUrl += "/";
+            }
+            return baseUrl + bucket + "/" + objectKey;
+        } catch (Exception e) {
+            throw new RuntimeException("Upload failed: " + e.getMessage(), e);
+        }
+    }
+    // 获取文件 MIME 类型
+    public String getMimeTypeByExtension(String fileName) {
+        // 获取文件扩展名
+        String extension = fileName.substring(fileName.lastIndexOf('.') + 1).toLowerCase();
+
+        // 根据文件扩展名返回 MIME 类型
+        switch (extension) {
+            case "jpg":
+            case "jpeg":
+                return "image/jpeg";
+            case "png":
+                return "image/png";
+            case "gif":
+                return "image/gif";
+            case "pdf":
+                return "application/pdf";
+            case "txt":
+                return "text/plain";
+            case "html":
+                return "text/html";
+            case "json":
+                return "application/json";
+            case "csv":
+                return "text/csv";
+            case "zip":
+                return "application/zip";
+            // 添加更多的扩展名映射
+            default:
+                return "application/octet-stream";  // 默认 MIME 类型
+        }
+    }
 
 }

--
Gitblit v1.9.3