zhaowenyu
2025-11-18 09323e7895ae85319cd8afc51409be43cde90e3d
ard-oss/src/main/java/com/ard/oss/service/impl/OssServiceContext.java
@@ -12,6 +12,7 @@
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;
@@ -88,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);
        }
@@ -131,10 +132,13 @@
                    ? extractFilename(file)
                    : object;
            // 通过文件扩展名获取 MIME 类型
            String contentType = getMimeTypeByExtension(file.getOriginalFilename());
            @Cleanup
            InputStream inputStream = file.getInputStream();
            // 上传文件到 Minio
            this.ossService.putObject(bucket, objectName, inputStream);
            this.ossService.putObject(bucket, objectName, inputStream, contentType);
            // ✅ 拼接永久 URL(不带 presigned 过期参数)
            String baseUrl = OssConfiguration.endpoint;
@@ -164,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 类型
        }
    }
}