diff --git a/blade-ops/blade-resource/pom.xml b/blade-ops/blade-resource/pom.xml
index e77d9ac9..d6ca1ff9 100644
--- a/blade-ops/blade-resource/pom.xml
+++ b/blade-ops/blade-resource/pom.xml
@@ -57,6 +57,11 @@
com.aliyun
aliyun-java-sdk-core
+
+
+ com.huaweicloud
+ esdk-obs-java
+
com.qcloud
diff --git a/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/AmazonS3OssBuilder.java b/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/AmazonS3OssBuilder.java
new file mode 100644
index 00000000..f3a614de
--- /dev/null
+++ b/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/AmazonS3OssBuilder.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the dreamlu.net developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.resource.builder.oss;
+
+import com.amazonaws.ClientConfiguration;
+import com.amazonaws.auth.AWSCredentials;
+import com.amazonaws.auth.AWSStaticCredentialsProvider;
+import com.amazonaws.auth.BasicAWSCredentials;
+import com.amazonaws.client.builder.AwsClientBuilder;
+import com.amazonaws.regions.Regions;
+import com.amazonaws.services.s3.AmazonS3;
+import com.amazonaws.services.s3.AmazonS3ClientBuilder;
+import lombok.SneakyThrows;
+import org.springblade.core.oss.OssTemplate;
+import org.springblade.core.oss.S3Template;
+import org.springblade.core.oss.props.OssProperties;
+import org.springblade.core.oss.rule.OssRule;
+import org.springblade.core.tool.utils.StringUtil;
+import org.springblade.resource.entity.Oss;
+
+/**
+ * Amazon S3 云存储构建类
+ *
+ * @author Chill
+ */
+public class AmazonS3OssBuilder {
+
+ @SneakyThrows
+ public static OssTemplate template(Oss oss, OssRule ossRule) {
+ // 创建配置类
+ OssProperties ossProperties = new OssProperties();
+ ossProperties.setEndpoint(oss.getEndpoint());
+ ossProperties.setAccessKey(oss.getAccessKey());
+ ossProperties.setSecretKey(oss.getSecretKey());
+ ossProperties.setBucketName(oss.getBucketName());
+ ossProperties.setRegion(oss.getRegion());
+ // 创建客户端
+ AWSCredentials credentials = new BasicAWSCredentials(ossProperties.getAccessKey(), ossProperties.getSecretKey());
+ ClientConfiguration clientConfiguration = new ClientConfiguration();
+ clientConfiguration.setSignerOverride("AWSS3V4SignerType");
+ AmazonS3 amazonS3 = AmazonS3ClientBuilder
+ .standard()
+ .withEndpointConfiguration(new AwsClientBuilder.
+ EndpointConfiguration(ossProperties.getEndpoint(),
+ StringUtil.isBlank(ossProperties.getRegion()) ? Regions.DEFAULT_REGION.name() : Regions.fromName(ossProperties.getRegion()).getName()))
+ .withPathStyleAccessEnabled(true)
+ .withClientConfiguration(clientConfiguration)
+ .withCredentials(new AWSStaticCredentialsProvider(credentials))
+ .build();
+ return new S3Template(amazonS3, ossRule, ossProperties);
+ }
+
+}
diff --git a/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/HuaweiObsBuilder.java b/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/HuaweiObsBuilder.java
new file mode 100644
index 00000000..8efaca42
--- /dev/null
+++ b/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/HuaweiObsBuilder.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the dreamlu.net developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.resource.builder.oss;
+
+import com.obs.services.ObsClient;
+import com.obs.services.ObsConfiguration;
+import lombok.SneakyThrows;
+import org.springblade.core.oss.HuaweiObsTemplate;
+import org.springblade.core.oss.OssTemplate;
+import org.springblade.core.oss.props.OssProperties;
+import org.springblade.core.oss.rule.OssRule;
+import org.springblade.resource.entity.Oss;
+
+/**
+ * 华为云存储构建类
+ *
+ * @author Chill
+ */
+public class HuaweiObsBuilder {
+
+ @SneakyThrows
+ public static OssTemplate template(Oss oss, OssRule ossRule) {
+ // 创建配置类
+ OssProperties ossProperties = new OssProperties();
+ ossProperties.setEndpoint(oss.getEndpoint());
+ ossProperties.setAccessKey(oss.getAccessKey());
+ ossProperties.setSecretKey(oss.getSecretKey());
+ ossProperties.setBucketName(oss.getBucketName());
+ // 使用可定制各参数的配置类(ObsConfiguration)创建OBS客户端(ObsClient),创建完成后不支持再次修改参数
+ ObsConfiguration conf = new ObsConfiguration();
+ conf.setEndPoint(ossProperties.getEndpoint());
+ // 设置OSSClient允许打开的最大HTTP连接数,默认为1024个。
+ conf.setMaxConnections(1024);
+ // 设置Socket层传输数据的超时时间,默认为50000毫秒。
+ conf.setSocketTimeout(50000);
+ // 设置建立连接的超时时间,默认为50000毫秒。
+ conf.setConnectionTimeout(50000);
+ // 设置从连接池中获取连接的超时时间(单位:毫秒),默认不超时。
+ conf.setConnectionRequestTimeout(1000);
+ // 设置连接空闲超时时间。超时则关闭连接,默认为60000毫秒。
+ conf.setIdleConnectionTime(60000);
+ // 设置失败请求重试次数,默认为3次。
+ conf.setMaxErrorRetry(5);
+ // 创建客户端
+ ObsClient obsClient = new ObsClient(ossProperties.getAccessKey(), ossProperties.getSecretKey(), conf);
+ return new HuaweiObsTemplate(obsClient, ossProperties, ossRule);
+ }
+
+}
diff --git a/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/OssBuilder.java b/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/OssBuilder.java
index 13fef787..058c2bb5 100644
--- a/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/OssBuilder.java
+++ b/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/OssBuilder.java
@@ -106,7 +106,11 @@ public class OssBuilder {
} else if (oss.getCategory() == OssEnum.ALI.getCategory()) {
template = AliOssBuilder.template(oss, ossRule);
} else if (oss.getCategory() == OssEnum.TENCENT.getCategory()) {
- template = TencentOssBuilder.template(oss, ossRule);
+ template = TencentCosBuilder.template(oss, ossRule);
+ } else if (oss.getCategory() == OssEnum.HUAWEI.getCategory()) {
+ template = HuaweiObsBuilder.template(oss, ossRule);
+ } else if (oss.getCategory() == OssEnum.AMAZONS3.getCategory()) {
+ template = AmazonS3OssBuilder.template(oss, ossRule);
}
templatePool.put(tenantId, template);
ossPool.put(tenantId, oss);
diff --git a/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/QiniuOssBuilder.java b/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/QiniuOssBuilder.java
index b6730a5c..bb84061a 100644
--- a/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/QiniuOssBuilder.java
+++ b/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/QiniuOssBuilder.java
@@ -37,15 +37,17 @@ public class QiniuOssBuilder {
@SneakyThrows
public static OssTemplate template(Oss oss, OssRule ossRule) {
- Configuration cfg = new Configuration(Region.autoRegion());
- Auth auth = Auth.create(oss.getAccessKey(), oss.getSecretKey());
- UploadManager uploadManager = new UploadManager(cfg);
- BucketManager bucketManager = new BucketManager(auth, cfg);
+ // 创建配置类
OssProperties ossProperties = new OssProperties();
ossProperties.setEndpoint(oss.getEndpoint());
ossProperties.setAccessKey(oss.getAccessKey());
ossProperties.setSecretKey(oss.getSecretKey());
ossProperties.setBucketName(oss.getBucketName());
+ // 创建客户端
+ Configuration cfg = new Configuration(Region.autoRegion());
+ Auth auth = Auth.create(oss.getAccessKey(), oss.getSecretKey());
+ UploadManager uploadManager = new UploadManager(cfg);
+ BucketManager bucketManager = new BucketManager(auth, cfg);
return new QiniuTemplate(auth, uploadManager, bucketManager, ossProperties, ossRule);
}
diff --git a/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/TencentOssBuilder.java b/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/TencentCosBuilder.java
similarity index 98%
rename from blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/TencentOssBuilder.java
rename to blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/TencentCosBuilder.java
index b724d09e..6379d78d 100644
--- a/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/TencentOssBuilder.java
+++ b/blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/TencentCosBuilder.java
@@ -33,7 +33,7 @@ import org.springblade.resource.entity.Oss;
*
* @author Chill
*/
-public class TencentOssBuilder {
+public class TencentCosBuilder {
@SneakyThrows
public static OssTemplate template(Oss oss, OssRule ossRule) {