diff --git a/bashi-admin/src/main/resources/application.yml b/bashi-admin/src/main/resources/application.yml
index 28955f5..9559923 100644
--- a/bashi-admin/src/main/resources/application.yml
+++ b/bashi-admin/src/main/resources/application.yml
@@ -338,3 +338,14 @@ dromara:
base-path: dk-plus/ # 基础路径
path-patterns: /dk-plus/** # 访问路径
storage-path: D:/Temp/ # 存储路径
+ali:
+ oss:
+ enable: false
+ access-key-id: key
+ access-key-secret: secret
+ endpoint: cn-hangzhou
+ bucket-name: nono
+ duration-seconds: 3600
+ role-arn: acs:ram::12312321312:role/ramoss
+
+
diff --git a/bashi-dk/pom.xml b/bashi-dk/pom.xml
index f5a74c8..c9ae0ae 100644
--- a/bashi-dk/pom.xml
+++ b/bashi-dk/pom.xml
@@ -47,5 +47,12 @@
created on 2021/7/13
* + * https://help.aliyun.com/zh/oss/developer-reference/use-temporary-access-credentials-provided-by-sts-to-access-oss#p-osc-r0m-u63 + * * @author zhangliang */ @RestController @@ -26,6 +38,19 @@ public class V2CommonController { @Autowired private FileStorageService fileStorageService; + @Autowired + private StsOssKit stsOssKit; + + @GetMapping("/v2/common/sts") + @ApiOperation("文件上传") + public AjaxResult getSts(){ + StsResult stsToken = stsOssKit.getStsToken(); + if(stsToken == null){ + return AjaxResult.error(400,"文件上传初始化失败"); + } + return AjaxResult.success(stsToken); + } + @PostMapping("/v2/common/upload") @ApiOperation("文件上传") public AjaxResult uploadFile(MultipartFile file) throws Exception { diff --git a/bashi-dk/src/main/java/com/bashi/dk/oss/ali/AliOssKit.java b/bashi-dk/src/main/java/com/bashi/dk/oss/ali/AliOssKit.java index 2ca1404..4e08154 100644 --- a/bashi-dk/src/main/java/com/bashi/dk/oss/ali/AliOssKit.java +++ b/bashi-dk/src/main/java/com/bashi/dk/oss/ali/AliOssKit.java @@ -32,7 +32,7 @@ public class AliOssKit { public final static String OSS_KEY_COMMON = "dk/common/"; - @PostConstruct +// @PostConstruct public void init(){ if(!ossConfig.isEnable()){ log.error("未开启阿里云OSS配置"); diff --git a/bashi-dk/src/main/java/com/bashi/dk/oss/ali/OssConfig.java b/bashi-dk/src/main/java/com/bashi/dk/oss/ali/OssConfig.java index 89635f2..6e42f8e 100644 --- a/bashi-dk/src/main/java/com/bashi/dk/oss/ali/OssConfig.java +++ b/bashi-dk/src/main/java/com/bashi/dk/oss/ali/OssConfig.java @@ -21,4 +21,9 @@ public class OssConfig { private String accessKeyId; // 连接keyId private String accessKeySecret; // 连接秘钥 private String bucketName; // 需要存储的bucketName + private Long durationSeconds = 3600L; + private String roleArn; + private String roleSessionName = "sts-session"; + + private String key = "upload/"; } diff --git a/bashi-dk/src/main/java/com/bashi/dk/oss/ali/StsOssKit.java b/bashi-dk/src/main/java/com/bashi/dk/oss/ali/StsOssKit.java new file mode 100644 index 0000000..4b40a73 --- /dev/null +++ b/bashi-dk/src/main/java/com/bashi/dk/oss/ali/StsOssKit.java @@ -0,0 +1,76 @@ +package com.bashi.dk.oss.ali; + +import com.alibaba.fastjson.JSON; +import com.aliyun.oss.OSSClient; +import com.aliyuncs.DefaultAcsClient; +import com.aliyuncs.IAcsClient; +import com.aliyuncs.auth.sts.AssumeRoleRequest; +import com.aliyuncs.auth.sts.AssumeRoleResponse; +import com.aliyuncs.exceptions.ClientException; +import com.aliyuncs.exceptions.ServerException; +import com.aliyuncs.profile.DefaultProfile; +import lombok.Getter; +import lombok.Setter; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; + +@Component +@Slf4j +public class StsOssKit { + + @Autowired + @Setter + @Getter + private OssConfig ossConfig; + + @Getter + public IAcsClient acsClient = null; + + @PostConstruct + public void init(){ + if(!ossConfig.isEnable()){ + log.error("未开启阿里云OSS配置"); + return; + } + DefaultProfile profile = DefaultProfile.getProfile(ossConfig.getEndpoint(), ossConfig.getAccessKeyId(), ossConfig.getAccessKeySecret()); + acsClient = new DefaultAcsClient(profile); + } + + + public StsResult getStsToken(){ + // 创建API请求并设置参数 + AssumeRoleRequest request = new AssumeRoleRequest(); + request.setDurationSeconds(ossConfig.getDurationSeconds()); + request.setRoleArn(ossConfig.getRoleArn()); + request.setRoleSessionName(ossConfig.getRoleSessionName()); + try { + AssumeRoleResponse response = acsClient.getAcsResponse(request); + log.info(JSON.toJSONString(response)); + // 打印您需要的返回值,此处打印的是此次请求的 RequestId + log.info(response.getRequestId()); + StsResult stsResult = new StsResult(); + stsResult.setToken(response.getCredentials().getSecurityToken()); + stsResult.setKeyId(response.getCredentials().getAccessKeyId()); + stsResult.setKeySecret(response.getCredentials().getAccessKeySecret()); + stsResult.setRegion("oss-"+ossConfig.getEndpoint()); + stsResult.setBucket(ossConfig.getBucketName()); + String nowStr = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); + stsResult.setKey(ossConfig.getKey()+nowStr+"/"); + return stsResult; + } catch (ServerException e) { + log.error("上传文件系统异常",e); + } catch (ClientException e) { + // 打印错误码 + log.error("ErrCode:" + e.getErrCode()); + log.error("ErrMsg:" + e.getErrMsg()); + log.error("RequestId:" + e.getRequestId()); + } + return null; + } +} + diff --git a/bashi-dk/src/main/java/com/bashi/dk/oss/ali/StsResult.java b/bashi-dk/src/main/java/com/bashi/dk/oss/ali/StsResult.java new file mode 100644 index 0000000..03d74e6 --- /dev/null +++ b/bashi-dk/src/main/java/com/bashi/dk/oss/ali/StsResult.java @@ -0,0 +1,13 @@ +package com.bashi.dk.oss.ali; + +import lombok.Data; + +@Data +public class StsResult { + private String token; + private String keyId; + private String keySecret; + private String region; + private String bucket; + private String key; +}