From a91a892a18e948bef980a1d462c7ea97904f671f Mon Sep 17 00:00:00 2001 From: AprilWind <2100166581@qq.com> Date: Fri, 22 Mar 2024 12:50:35 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96s3=20Crt=20=E8=87=AA?= =?UTF-8?q?=E5=AE=9A=E4=B9=89=E9=85=8D=E7=BD=AE=E5=B1=9E=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dromara/common/oss/core/OssClient.java | 21 +++++++--- .../oss/properties/S3CrtProperties.java | 40 +++++++++++++++++++ ...ot.autoconfigure.AutoConfiguration.imports | 1 + 3 files changed, 56 insertions(+), 6 deletions(-) create mode 100644 ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/properties/S3CrtProperties.java create mode 100644 ruoyi-common/ruoyi-common-oss/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 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 eb1656c06..ec06d31ac 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 @@ -4,6 +4,7 @@ import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.IdUtil; import org.dromara.common.core.constant.Constants; import org.dromara.common.core.utils.DateUtils; +import org.dromara.common.core.utils.SpringUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.file.FileUtils; import org.dromara.common.oss.constant.OssConstant; @@ -12,6 +13,7 @@ import org.dromara.common.oss.enumd.AccessPolicyType; import org.dromara.common.oss.enumd.PolicyType; import org.dromara.common.oss.exception.OssException; import org.dromara.common.oss.properties.OssProperties; +import org.dromara.common.oss.properties.S3CrtProperties; import software.amazon.awssdk.auth.credentials.AwsBasicCredentials; import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider; import software.amazon.awssdk.core.async.AsyncRequestBody; @@ -54,6 +56,11 @@ public class OssClient { */ private final OssProperties properties; + /** + * s3 Crt 配置属性 + */ + private final S3CrtProperties S3_CRT; + /** * Amazon S3 异步客户端 */ @@ -78,6 +85,7 @@ public class OssClient { public OssClient(String configKey, OssProperties ossProperties) { this.configKey = configKey; this.properties = ossProperties; + this.S3_CRT = SpringUtils.getBean(S3CrtProperties.class); try { // 创建 AWS 认证信息 StaticCredentialsProvider credentialsProvider = StaticCredentialsProvider.create( @@ -88,16 +96,16 @@ public class OssClient { .credentialsProvider(credentialsProvider) .endpointOverride(URI.create(getEndpoint())) .region(of()) - .targetThroughputInGbps(20.0) - .minimumPartSizeInBytes(10 * 1025 * 1024L) - .checksumValidationEnabled(false) + .targetThroughputInGbps(S3_CRT.getTargetThroughputInGbps()) + .minimumPartSizeInBytes(S3_CRT.getUploadPartSize()) + .checksumValidationEnabled(S3_CRT.getChecksumValidationEnabled()) .build(); //AWS基于 CRT 的 S3 AsyncClient 实例用作 S3 传输管理器的底层客户端 this.transferManager = S3TransferManager.builder().s3Client(this.client).build(); // 检查是否连接到 MinIO,MinIO 使用 HTTPS 限制使用域名访问,需要启用路径样式访问 - S3Configuration config = S3Configuration.builder().chunkedEncodingEnabled(false) + S3Configuration config = S3Configuration.builder().chunkedEncodingEnabled(S3_CRT.getChunkedEncodingEnabled()) // minio 使用https限制使用域名访问 需要此配置 站点填域名 .pathStyleAccessEnabled(!StringUtils.containsAny(properties.getEndpoint(), OssConstant.CLOUD_SERVICE)).build(); @@ -340,8 +348,9 @@ public class OssClient { Path tempFilePath = fileDownload(path); // 创建输入流 InputStream inputStream = Files.newInputStream(tempFilePath); - // 删除临时文件 - FileUtils.del(tempFilePath); + if (S3_CRT.getDelTempFilePath()) { + FileUtils.del(tempFilePath); + } // 返回对象内容的输入流 return inputStream; } diff --git a/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/properties/S3CrtProperties.java b/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/properties/S3CrtProperties.java new file mode 100644 index 000000000..24a1362b3 --- /dev/null +++ b/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/properties/S3CrtProperties.java @@ -0,0 +1,40 @@ +package org.dromara.common.oss.properties; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; + +/** + * s3 Crt 配置属性 + * + * @author AprilWind + */ +@Data +@ConfigurationProperties(prefix = "s3crt") +public class S3CrtProperties { + + /** + * 读取后立即删除临时文件 + */ + Boolean delTempFilePath = true; + + /** + * 校验和验证是否启用,默认为关闭状态 + */ + Boolean checksumValidationEnabled = false; + + /** + * 是否启用分块编码,默认为关闭状态 + */ + Boolean chunkedEncodingEnabled = false; + + /** + * 上传分块的大小,默认为 10 MB(10 * 1024 * 1024 字节) + */ + Long uploadPartSize = 10 * 1024 * 1024L; + + /** + * 目标吞吐量(以 Gbps 为单位),默认为 20.0 Gbps + */ + Double targetThroughputInGbps = 20.0; + +} diff --git a/ruoyi-common/ruoyi-common-oss/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/ruoyi-common/ruoyi-common-oss/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 000000000..e38b947e2 --- /dev/null +++ b/ruoyi-common/ruoyi-common-oss/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +org.dromara.common.oss.properties.S3CrtProperties