From d1d47d2599dc52a5ae81f2eaba59f32001d77b2f Mon Sep 17 00:00:00 2001 From: Jack <1426290722@qq.com> Date: Thu, 13 Nov 2025 08:31:04 +0000 Subject: [PATCH] =?UTF-8?q?!786=20update=20=E4=B8=8A=E4=BC=A0=E8=AF=B7?= =?UTF-8?q?=E6=B1=82=E7=9A=84=E9=A2=84=E7=AD=BE=E5=90=8DURL=20*=20update?= =?UTF-8?q?=20=E4=B8=8A=E4=BC=A0=E8=AF=B7=E6=B1=82=E7=9A=84=E9=A2=84?= =?UTF-8?q?=E7=AD=BE=E5=90=8DURL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dromara/common/oss/core/OssClient.java | 30 ++++++++++++++++--- .../service/impl/SysOssServiceImpl.java | 2 +- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java b/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java index b9a90dc75..2540dbd0e 100644 --- a/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java +++ b/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 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(); } /** diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java index 33341a91d..db42d6ae4 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java +++ b/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; }