diff --git a/accompany-base/accompany-core/pom.xml b/accompany-base/accompany-core/pom.xml
index f64fec62c..3f449217a 100644
--- a/accompany-base/accompany-core/pom.xml
+++ b/accompany-base/accompany-core/pom.xml
@@ -80,6 +80,12 @@
+
+ com.qcloud
+ cos-sts_api
+ ${tencentcloud-cos-sts-sdk-java.version}
+
+
diff --git a/accompany-base/accompany-core/src/main/java/com/accompany/common/tencent/cos/TencentCosTempToken.java b/accompany-base/accompany-core/src/main/java/com/accompany/common/tencent/cos/TencentCosTempToken.java
new file mode 100644
index 000000000..9c7ba645f
--- /dev/null
+++ b/accompany-base/accompany-core/src/main/java/com/accompany/common/tencent/cos/TencentCosTempToken.java
@@ -0,0 +1,14 @@
+package com.accompany.common.tencent.cos;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+@ApiModel
+@Data
+public class TencentCosTempToken {
+
+ private String secretId;
+ private String secretKey;
+ private String sessionToken;
+
+}
diff --git a/accompany-base/accompany-core/src/main/java/com/accompany/common/tencent/cos/TencentCosUploadService.java b/accompany-base/accompany-core/src/main/java/com/accompany/common/tencent/cos/TencentCosUploadService.java
index f7c3e5b6d..2cdaafde6 100644
--- a/accompany-base/accompany-core/src/main/java/com/accompany/common/tencent/cos/TencentCosUploadService.java
+++ b/accompany-base/accompany-core/src/main/java/com/accompany/common/tencent/cos/TencentCosUploadService.java
@@ -6,6 +6,8 @@ import com.accompany.core.exception.ServiceException;
import com.qcloud.cos.COSClient;
import com.qcloud.cos.model.PutObjectRequest;
import com.qcloud.cos.model.PutObjectResult;
+import com.tencent.cloud.CosStsClient;
+import com.tencent.cloud.Response;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@@ -13,6 +15,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.InputStream;
+import java.util.Map;
+import java.util.TreeMap;
@Slf4j
@Service
@@ -43,4 +47,59 @@ public class TencentCosUploadService {
return prefix + "/" + fileName;
}
+ @SneakyThrows
+ public TencentCosTempToken getTempToken(){
+ TreeMap configMap = new TreeMap<>();
+ // 替换为您的云 api 密钥 SecretId
+ configMap.put("secretId", config.getSecretId());
+ // 替换为您的云 api 密钥 SecretKey
+ configMap.put("secretKey", config.getSecretKey());
+
+ // 设置域名:
+ // 如果您使用了腾讯云 cvm,可以设置内部域名
+ //configMap.put("host", "sts.internal.tencentcloudapi.com");
+
+ // 临时密钥有效时长,单位是秒,默认 1800 秒,目前主账号最长 2 小时(即 7200 秒),子账号最长 36 小时(即 129600)秒
+ configMap.put("durationSeconds", 1800);
+
+ // 换成您的 bucket
+ configMap.put("bucket", config.getBucket());
+ // 换成 bucket 所在地区
+ configMap.put("region", config.getRegion());
+
+
+ // 这里改成允许的路径前缀,可以根据自己网站的用户登录态判断允许上传的具体路径
+ // 列举几种典型的前缀授权场景:
+ // 1、允许访问所有对象:"*"
+ // 2、允许访问指定的对象:"a/a1.txt", "b/b1.txt"
+ // 3、允许访问指定前缀的对象:"a*", "a/*", "b/*"
+ // 如果填写了“*”,将允许用户访问所有资源;除非业务需要,否则请按照最小权限原则授予用户相应的访问权限范围。
+ configMap.put("allowPrefixes", new String[] {"*"});
+
+ // 密钥的权限列表。必须在这里指定本次临时密钥所需要的权限。
+ // 简单上传、表单上传和分块上传需要以下的权限,其他权限列表请参见 https://intl.cloud.tencent.com/document/product/436/30580
+ String[] allowActions = new String[] {
+ // 简单上传
+ "name/cos:PutObject",
+ // 表单上传、小程序上传
+ "name/cos:PostObject",
+ // 分块上传
+ "name/cos:InitiateMultipartUpload",
+ "name/cos:ListMultipartUploads",
+ "name/cos:ListParts",
+ "name/cos:UploadPart",
+ "name/cos:CompleteMultipartUpload"
+ };
+ configMap.put("allowActions", allowActions);
+
+ Response response = CosStsClient.getCredential(configMap);
+
+ TencentCosTempToken tempToken = new TencentCosTempToken();
+ tempToken.setSecretId(response.credentials.tmpSecretId);
+ tempToken.setSecretKey(response.credentials.tmpSecretKey);
+ tempToken.setSessionToken(response.credentials.sessionToken);
+
+ return tempToken;
+ }
+
}
diff --git a/accompany-business/accompany-business-web/src/main/java/com/accompany/business/controller/TencentCosController.java b/accompany-business/accompany-business-web/src/main/java/com/accompany/business/controller/TencentCosController.java
new file mode 100644
index 000000000..6b3d1f3cd
--- /dev/null
+++ b/accompany-business/accompany-business-web/src/main/java/com/accompany/business/controller/TencentCosController.java
@@ -0,0 +1,31 @@
+package com.accompany.business.controller;
+
+import com.accompany.common.annotation.Authorization;
+import com.accompany.common.result.BusiResult;
+import com.accompany.common.tencent.cos.TencentCosTempToken;
+import com.accompany.common.tencent.cos.TencentCosUploadService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.SneakyThrows;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@Api(tags = "腾讯云cos上传")
+@RestController
+@RequestMapping(value = "/tencent/cos")
+public class TencentCosController {
+
+ @Autowired
+ private TencentCosUploadService uploadService;
+
+ @ApiOperation("获取文件上传凭证")
+ @SneakyThrows
+ @Authorization
+ @GetMapping("/getToken")
+ public BusiResult getToken() {
+ return BusiResult.success(uploadService.getTempToken());
+ }
+
+}
\ No newline at end of file
diff --git a/accompany-dependencies/pom.xml b/accompany-dependencies/pom.xml
index 2d84e58db..aa757e5ef 100644
--- a/accompany-dependencies/pom.xml
+++ b/accompany-dependencies/pom.xml
@@ -93,6 +93,7 @@
2.6
3.1.781
5.6.179
+ 3.1.1
2.2.3
2.3.2
1.5.0