Browse Source

update 优化 oss 下载使用临时文件避免线程冲突

疯狂的狮子Li 2 years ago
parent
commit
13e60a6048

+ 3 - 17
ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java

@@ -34,7 +34,6 @@ import java.net.URI;
 import java.net.URL;
 import java.nio.file.Files;
 import java.nio.file.Path;
-import java.nio.file.Paths;
 import java.time.Duration;
 
 /**
@@ -242,16 +241,13 @@ public class OssClient {
      * @throws OssException 如果下载失败,抛出自定义异常
      */
     public Path fileDownload(String path) {
-        // 从路径中移除 URL 前缀
-        String url = removeBaseUrl(path);
-
-        // 构建临时文件路径 文件名必须是唯一不存在的,路径必须是存在的
-        Path tempFilePath = Paths.get(extractFileName(url));
+        // 构建临时文件
+        Path tempFilePath = FileUtils.createTempFile().toPath();
         // 使用 S3TransferManager 下载文件
         FileDownload downloadFile = transferManager.downloadFile(
             x -> x.getObjectRequest(
                     y -> y.bucket(properties.getBucketName())
-                        .key(url)
+                        .key(removeBaseUrl(path))
                         .build())
                 .addTransferListener(LoggingTransferListener.create())
                 .destination(tempFilePath)
@@ -451,16 +447,6 @@ public class OssClient {
         return path.replace(getUrl() + StringUtils.SLASH, "");
     }
 
-    /**
-     * 从文件路径中提取文件名
-     *
-     * @param path 文件路径
-     * @return 提取的文件名或默认文件名
-     */
-    public String extractFileName(String path) {
-        return FileUtils.getTmpDir() + StringUtils.SLASH + Paths.get(path).getFileName().toString();
-    }
-
     /**
      * 服务商
      */