From b5908d52d7ef657d074ef6b0d4517eeeb2450fc9 Mon Sep 17 00:00:00 2001
From: 疯狂的狮子Li <15040126243@163.com>
Date: 星期三, 20 十一月 2024 13:30:10 +0800
Subject: [PATCH] !600 update 升级SnailJob版本到1.2.0 Merge pull request !600 from dhb52/dev
---
ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java | 159 ++++++++++-------------------------------------------
1 files changed, 30 insertions(+), 129 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 fcad35b..1261b47 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
@@ -9,21 +9,18 @@
import org.dromara.common.oss.constant.OssConstant;
import org.dromara.common.oss.entity.UploadResult;
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 software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
import software.amazon.awssdk.core.ResponseInputStream;
-import software.amazon.awssdk.core.async.AsyncRequestBody;
import software.amazon.awssdk.core.async.AsyncResponseTransformer;
import software.amazon.awssdk.core.async.BlockingInputStreamAsyncRequestBody;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.s3.S3AsyncClient;
import software.amazon.awssdk.services.s3.S3Configuration;
+import software.amazon.awssdk.services.s3.crt.S3CrtHttpConfiguration;
import software.amazon.awssdk.services.s3.model.GetObjectResponse;
-import software.amazon.awssdk.services.s3.model.NoSuchBucketException;
-import software.amazon.awssdk.services.s3.model.S3Exception;
import software.amazon.awssdk.services.s3.presigner.S3Presigner;
import software.amazon.awssdk.transfer.s3.S3TransferManager;
import software.amazon.awssdk.transfer.s3.model.*;
@@ -83,10 +80,10 @@
StaticCredentialsProvider credentialsProvider = StaticCredentialsProvider.create(
AwsBasicCredentials.create(properties.getAccessKey(), properties.getSecretKey()));
- //MinIO 浣跨敤 HTTPS 闄愬埗浣跨敤鍩熷悕璁块棶锛岀珯鐐瑰~鍩熷悕銆傞渶瑕佸惎鐢ㄨ矾寰勬牱寮忚闂�
+ // MinIO 浣跨敤 HTTPS 闄愬埗浣跨敤鍩熷悕璁块棶锛岀珯鐐瑰~鍩熷悕銆傞渶瑕佸惎鐢ㄨ矾寰勬牱寮忚闂�
boolean isStyle = !StringUtils.containsAny(properties.getEndpoint(), OssConstant.CLOUD_SERVICE);
- //鍒涘缓AWS鍩轰簬 CRT 鐨� S3 瀹㈡埛绔�
+ // 鍒涘缓AWS鍩轰簬 CRT 鐨� S3 瀹㈡埛绔�
this.client = S3AsyncClient.crtBuilder()
.credentialsProvider(credentialsProvider)
.endpointOverride(URI.create(getEndpoint()))
@@ -95,6 +92,9 @@
.minimumPartSizeInBytes(10 * 1025 * 1024L)
.checksumValidationEnabled(false)
.forcePathStyle(isStyle)
+ .httpConfiguration(S3CrtHttpConfiguration.builder()
+ .connectionTimeout(Duration.ofSeconds(60)) // 璁剧疆杩炴帴瓒呮椂
+ .build())
.build();
//AWS鍩轰簬 CRT 鐨� S3 AsyncClient 瀹炰緥鐢ㄤ綔 S3 浼犺緭绠$悊鍣ㄧ殑搴曞眰瀹㈡埛绔�
@@ -112,8 +112,6 @@
.serviceConfiguration(config)
.build();
- // 鍒涘缓瀛樺偍妗�
- createBucket();
} catch (Exception e) {
if (e instanceof OssException) {
throw e;
@@ -123,52 +121,16 @@
}
/**
- * 鍚屾鍒涘缓瀛樺偍妗�
- * 濡傛灉瀛樺偍妗朵笉瀛樺湪锛屼細杩涜鍒涘缓锛涘鏋滃瓨鍌ㄦ《瀛樺湪锛屼笉鎵ц浠讳綍鎿嶄綔
- *
- * @throws OssException 褰撳垱寤哄瓨鍌ㄦ《鏃跺彂鐢熷紓甯告椂鎶涘嚭
- */
- public void createBucket() {
- String bucketName = properties.getBucketName();
- try {
- // 灏濊瘯鑾峰彇瀛樺偍妗剁殑淇℃伅
- client.headBucket(
- x -> x.bucket(bucketName)
- .build())
- .join();
- } catch (Exception ex) {
- if (ex.getCause() instanceof NoSuchBucketException) {
- try {
- // 瀛樺偍妗朵笉瀛樺湪锛屽皾璇曞垱寤哄瓨鍌ㄦ《
- client.createBucket(
- x -> x.bucket(bucketName))
- .join();
-
- // 璁剧疆瀛樺偍妗剁殑璁块棶绛栫暐锛圔ucket Policy锛�
- client.putBucketPolicy(
- x -> x.bucket(bucketName)
- .policy(getPolicy(bucketName, getAccessPolicy().getPolicyType())))
- .join();
- } catch (S3Exception e) {
- // 瀛樺偍妗跺垱寤烘垨绛栫暐璁剧疆澶辫触
- throw new OssException("鍒涘缓Bucket澶辫触, 璇锋牳瀵归厤缃俊鎭�:[" + e.getMessage() + "]");
- }
- } else {
- throw new OssException("鍒ゆ柇Bucket鏄惁瀛樺湪澶辫触锛岃鏍稿閰嶇疆淇℃伅:[" + ex.getMessage() + "]");
- }
- }
- }
-
- /**
* 涓婁紶鏂囦欢鍒� Amazon S3锛屽苟杩斿洖涓婁紶缁撴灉
*
- * @param filePath 鏈湴鏂囦欢璺緞
- * @param key 鍦� Amazon S3 涓殑瀵硅薄閿�
- * @param md5Digest 鏈湴鏂囦欢鐨� MD5 鍝堝笇鍊硷紙鍙�夛級
+ * @param filePath 鏈湴鏂囦欢璺緞
+ * @param key 鍦� Amazon S3 涓殑瀵硅薄閿�
+ * @param md5Digest 鏈湴鏂囦欢鐨� MD5 鍝堝笇鍊硷紙鍙�夛級
+ * @param contentType 鏂囦欢鍐呭绫诲瀷
* @return UploadResult 鍖呭惈涓婁紶鍚庣殑鏂囦欢淇℃伅
* @throws OssException 濡傛灉涓婁紶澶辫触锛屾姏鍑鸿嚜瀹氫箟寮傚父
*/
- public UploadResult upload(Path filePath, String key, String md5Digest) {
+ public UploadResult upload(Path filePath, String key, String md5Digest, String contentType) {
try {
// 鏋勫缓涓婁紶璇锋眰瀵硅薄
FileUpload fileUpload = transferManager.uploadFile(
@@ -176,6 +138,10 @@
y -> y.bucket(properties.getBucketName())
.key(key)
.contentMD5(StringUtils.isNotEmpty(md5Digest) ? md5Digest : null)
+ .contentType(contentType)
+ // 鐢ㄤ簬璁剧疆瀵硅薄鐨勮闂帶鍒跺垪琛紙ACL锛夈�備笉鍚屼簯鍘傚晢瀵笰CL鐨勬敮鎸佸拰瀹炵幇鏂瑰紡鏈夋墍涓嶅悓锛�
+ // 鍥犳鏍规嵁鍏蜂綋鐨勪簯鏈嶅姟鎻愪緵鍟嗭紝浣犲彲鑳介渶瑕佽繘琛屼笉鍚岀殑閰嶇疆锛堣嚜琛屽紑鍚紝闃块噷浜戞湁acl鏉冮檺閰嶇疆锛岃吘璁簯娌℃湁acl鏉冮檺閰嶇疆锛�
+ //.acl(getAccessPolicy().getObjectCannedACL())
.build())
.addTransferListener(LoggingTransferListener.create())
.source(filePath).build());
@@ -201,17 +167,21 @@
* @param inputStream 瑕佷笂浼犵殑杈撳叆娴�
* @param key 鍦� Amazon S3 涓殑瀵硅薄閿�
* @param length 杈撳叆娴佺殑闀垮害
+ * @param contentType 鏂囦欢鍐呭绫诲瀷
* @return UploadResult 鍖呭惈涓婁紶鍚庣殑鏂囦欢淇℃伅
* @throws OssException 濡傛灉涓婁紶澶辫触锛屾姏鍑鸿嚜瀹氫箟寮傚父
*/
- public UploadResult upload(InputStream inputStream, String key, Long length) {
+ public UploadResult upload(InputStream inputStream, String key, Long length, String contentType) {
// 濡傛灉杈撳叆娴佷笉鏄� ByteArrayInputStream锛屽垯灏嗗叾璇诲彇涓哄瓧鑺傛暟缁勫啀鍒涘缓 ByteArrayInputStream
if (!(inputStream instanceof ByteArrayInputStream)) {
inputStream = new ByteArrayInputStream(IoUtil.readBytes(inputStream));
}
try {
// 鍒涘缓寮傛璇锋眰浣擄紙length濡傛灉涓虹┖浼氭姤閿欙級
- BlockingInputStreamAsyncRequestBody body = AsyncRequestBody.forBlockingInputStream(length);
+ BlockingInputStreamAsyncRequestBody body = BlockingInputStreamAsyncRequestBody.builder()
+ .contentLength(length)
+ .subscribeTimeout(Duration.ofSeconds(30))
+ .build();
// 浣跨敤 transferManager 杩涜涓婁紶
Upload upload = transferManager.upload(
@@ -219,6 +189,10 @@
.putObjectRequest(
y -> y.bucket(properties.getBucketName())
.key(key)
+ .contentType(contentType)
+ // 鐢ㄤ簬璁剧疆瀵硅薄鐨勮闂帶鍒跺垪琛紙ACL锛夈�備笉鍚屼簯鍘傚晢瀵笰CL鐨勬敮鎸佸拰瀹炵幇鏂瑰紡鏈夋墍涓嶅悓锛�
+ // 鍥犳鏍规嵁鍏蜂綋鐨勪簯鏈嶅姟鎻愪緵鍟嗭紝浣犲彲鑳介渶瑕佽繘琛屼笉鍚岀殑閰嶇疆锛堣嚜琛屽紑鍚紝闃块噷浜戞湁acl鏉冮檺閰嶇疆锛岃吘璁簯娌℃湁acl鏉冮檺閰嶇疆锛�
+ //.acl(getAccessPolicy().getObjectCannedACL())
.build())
.build());
@@ -334,8 +308,8 @@
* @return UploadResult 鍖呭惈涓婁紶鍚庣殑鏂囦欢淇℃伅
* @throws OssException 濡傛灉涓婁紶澶辫触锛屾姏鍑鸿嚜瀹氫箟寮傚父
*/
- public UploadResult uploadSuffix(byte[] data, String suffix) {
- return upload(new ByteArrayInputStream(data), getPath(properties.getPrefix(), suffix), Long.valueOf(data.length));
+ public UploadResult uploadSuffix(byte[] data, String suffix, String contentType) {
+ return upload(new ByteArrayInputStream(data), getPath(properties.getPrefix(), suffix), Long.valueOf(data.length), contentType);
}
/**
@@ -347,8 +321,8 @@
* @return UploadResult 鍖呭惈涓婁紶鍚庣殑鏂囦欢淇℃伅
* @throws OssException 濡傛灉涓婁紶澶辫触锛屾姏鍑鸿嚜瀹氫箟寮傚父
*/
- public UploadResult uploadSuffix(InputStream inputStream, String suffix, Long length) {
- return upload(inputStream, getPath(properties.getPrefix(), suffix), length);
+ public UploadResult uploadSuffix(InputStream inputStream, String suffix, Long length, String contentType) {
+ return upload(inputStream, getPath(properties.getPrefix(), suffix), length, contentType);
}
/**
@@ -360,7 +334,7 @@
* @throws OssException 濡傛灉涓婁紶澶辫触锛屾姏鍑鸿嚜瀹氫箟寮傚父
*/
public UploadResult uploadSuffix(File file, String suffix) {
- return upload(file.toPath(), getPath(properties.getPrefix(), suffix), null);
+ return upload(file.toPath(), getPath(properties.getPrefix(), suffix), null, FileUtils.getMimeType(suffix));
}
/**
@@ -511,79 +485,6 @@
*/
public AccessPolicyType getAccessPolicy() {
return AccessPolicyType.getByType(properties.getAccessPolicy());
- }
-
- /**
- * 鐢熸垚 AWS S3 瀛樺偍妗惰闂瓥鐣�
- *
- * @param bucketName 瀛樺偍妗�
- * @param policyType 妗剁瓥鐣ョ被鍨�
- * @return 绗﹀悎 AWS S3 瀛樺偍妗惰闂瓥鐣ユ牸寮忕殑瀛楃涓�
- */
- private static String getPolicy(String bucketName, PolicyType policyType) {
- String policy = switch (policyType) {
- case WRITE -> """
- {
- "Version": "2012-10-17",
- "Statement": []
- }
- """;
- case READ_WRITE -> """
- {
- "Version": "2012-10-17",
- "Statement": [
- {
- "Effect": "Allow",
- "Principal": "*",
- "Action": [
- "s3:GetBucketLocation",
- "s3:ListBucket",
- "s3:ListBucketMultipartUploads"
- ],
- "Resource": "arn:aws:s3:::bucketName"
- },
- {
- "Effect": "Allow",
- "Principal": "*",
- "Action": [
- "s3:AbortMultipartUpload",
- "s3:DeleteObject",
- "s3:GetObject",
- "s3:ListMultipartUploadParts",
- "s3:PutObject"
- ],
- "Resource": "arn:aws:s3:::bucketName/*"
- }
- ]
- }
- """;
- case READ -> """
- {
- "Version": "2012-10-17",
- "Statement": [
- {
- "Effect": "Allow",
- "Principal": "*",
- "Action": ["s3:GetBucketLocation"],
- "Resource": "arn:aws:s3:::bucketName"
- },
- {
- "Effect": "Deny",
- "Principal": "*",
- "Action": ["s3:ListBucket"],
- "Resource": "arn:aws:s3:::bucketName"
- },
- {
- "Effect": "Allow",
- "Principal": "*",
- "Action": "s3:GetObject",
- "Resource": "arn:aws:s3:::bucketName/*"
- }
- ]
- }
- """;
- };
- return policy.replaceAll("bucketName", bucketName);
}
}
--
Gitblit v1.9.3