Kaynağa Gözat

!786 update 上传请求的预签名URL
* update 上传请求的预签名URL

Jack 7 ay önce
ebeveyn
işleme
d1d47d2599

+ 26 - 4
ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java

@@ -33,6 +33,7 @@ import java.nio.channels.WritableByteChannel;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.time.Duration;
+import java.util.Map;
 import java.util.Optional;
 import java.util.function.Consumer;
 
@@ -317,13 +318,13 @@ public class OssClient {
     }
 
     /**
-     * 获取私有URL链接
+     * 创建下载请求的预签名URL
      *
      * @param objectKey   对象KEY
      * @param expiredTime 链接授权到期时间
      */
-    public String getPrivateUrl(String objectKey, Duration expiredTime) {
-        // 使用 AWS S3 预签名 URL 的生成器 获取对象的预签名 URL
+    public String createPresignedGetUrl(String objectKey, Duration expiredTime) {
+        // 使用 AWS S3 预签名 URL 的生成器 获取下载对象的预签名 URL
         URL url = presigner.presignGetObject(
                 x -> x.signatureDuration(expiredTime)
                     .getObjectRequest(
@@ -332,7 +333,28 @@ public class OssClient {
                             .build())
                     .build())
             .url();
-        return url.toString();
+        return url.toExternalForm();
+    }
+
+    /**
+     * 创建上传请求的预签名URL
+     *
+     * @param objectKey   对象KEY
+     * @param expiredTime 链接授权到期时间
+     * @param metadata 元数据
+     */
+    public String createPresignedPutUrl(String objectKey, Duration expiredTime, Map<String, String> metadata) {
+        // 使用 AWS S3 预签名 URL 的生成器 获取上传文件对象的预签名 URL
+        URL url = presigner.presignPutObject(
+                x -> x.signatureDuration(expiredTime)
+                    .putObjectRequest(
+                        y -> y.bucket(properties.getBucketName())
+                            .key(objectKey)
+                            .metadata(metadata)
+                            .build())
+                    .build())
+            .url();
+        return url.toExternalForm();
     }
 
     /**

+ 1 - 1
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java

@@ -270,7 +270,7 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
         OssClient storage = OssFactory.instance(oss.getService());
         // 仅修改桶类型为 private 的URL,临时URL时长为120s
         if (AccessPolicyType.PRIVATE == storage.getAccessPolicy()) {
-            oss.setUrl(storage.getPrivateUrl(oss.getFileName(), Duration.ofSeconds(120)));
+            oss.setUrl(storage.createPresignedGetUrl(oss.getFileName(), Duration.ofSeconds(120)));
         }
         return oss;
     }