From 258930bb8dbcf7238fb586c9aef0281838d3aa7b Mon Sep 17 00:00:00 2001 From: Yen Date: Thu, 23 Mar 2023 17:56:00 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 13 ++++ .../qs/serve/controller/CommonController.java | 13 ++++ .../modules/oss/entity/OssPolicySignVo.java | 19 +++++ .../serve/modules/oss/service/OssService.java | 18 +++++ .../oss/service/impl/OssServiceImpl.java | 73 +++++++++++++++++++ .../sys/controller/SysAttachController.java | 7 ++ 6 files changed, 143 insertions(+) create mode 100644 src/main/java/com/qs/serve/modules/oss/entity/OssPolicySignVo.java create mode 100644 src/main/java/com/qs/serve/modules/oss/service/OssService.java create mode 100644 src/main/java/com/qs/serve/modules/oss/service/impl/OssServiceImpl.java diff --git a/pom.xml b/pom.xml index 2dfc3a22..5cbda664 100644 --- a/pom.xml +++ b/pom.xml @@ -27,6 +27,7 @@ 3.5.2 true 4.2.0 + D:\workspace-main\JiaShiLi\jsl-questionnaire-base\src\main\resources\lib\ @@ -190,6 +191,18 @@ test + + com.aliyun.oss + aliyun-sdk-oss + 3.16.1 + + + + joda-time + joda-time + 2.10 + + diff --git a/src/main/java/com/qs/serve/controller/CommonController.java b/src/main/java/com/qs/serve/controller/CommonController.java index 4312a24f..46233ac2 100644 --- a/src/main/java/com/qs/serve/controller/CommonController.java +++ b/src/main/java/com/qs/serve/controller/CommonController.java @@ -5,6 +5,7 @@ import com.qs.serve.common.model.annotation.SysLog; import com.qs.serve.common.model.dto.R; import com.qs.serve.common.model.enums.BizType; import com.qs.serve.common.util.*; +import com.qs.serve.modules.oss.service.OssService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; @@ -32,6 +33,18 @@ public class CommonController { private UploadProperties uploadProperties; + private OssService ossService; + + /** + * 获取签名 + * @param request + * @return + */ + @SysLog(title = "文件",biz = BizType.UPLOAD) + @GetMapping("/getSign") + public R getSign(HttpServletRequest request) { + return R.ok(ossService.getPolicySign()); + } /** diff --git a/src/main/java/com/qs/serve/modules/oss/entity/OssPolicySignVo.java b/src/main/java/com/qs/serve/modules/oss/entity/OssPolicySignVo.java new file mode 100644 index 00000000..bb7dc034 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/oss/entity/OssPolicySignVo.java @@ -0,0 +1,19 @@ +package com.qs.serve.modules.oss.entity; + +import lombok.Data; + +/** + * @author YenHex + * @since 2023/3/23 + */ +@Data +public class OssPolicySignVo { + + private String accessId; + private String policy; + private String signature; + private String host; + private Long expire; + private String dir; + +} diff --git a/src/main/java/com/qs/serve/modules/oss/service/OssService.java b/src/main/java/com/qs/serve/modules/oss/service/OssService.java new file mode 100644 index 00000000..7d2d457d --- /dev/null +++ b/src/main/java/com/qs/serve/modules/oss/service/OssService.java @@ -0,0 +1,18 @@ +package com.qs.serve.modules.oss.service; + +import com.qs.serve.modules.oss.entity.OssPolicySignVo; + +/** + * @author YenHex + * @since 2023/3/23 + */ +public interface OssService { + + /** + * 获取文件签名 + * @return + */ + OssPolicySignVo getPolicySign(); + + +} diff --git a/src/main/java/com/qs/serve/modules/oss/service/impl/OssServiceImpl.java b/src/main/java/com/qs/serve/modules/oss/service/impl/OssServiceImpl.java new file mode 100644 index 00000000..2a0d48d7 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/oss/service/impl/OssServiceImpl.java @@ -0,0 +1,73 @@ +package com.qs.serve.modules.oss.service.impl; + +import com.aliyun.oss.OSS; +import com.aliyun.oss.OSSClientBuilder; +import com.aliyun.oss.common.utils.BinaryUtil; +import com.aliyun.oss.model.MatchMode; +import com.aliyun.oss.model.PolicyConditions; +import com.qs.serve.common.util.JsonUtil; +import com.qs.serve.modules.oss.entity.OssPolicySignVo; +import com.qs.serve.modules.oss.service.OssService; +import org.springframework.stereotype.Service; + +import java.io.UnsupportedEncodingException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * @author YenHex + * @since 2023/3/23 + */ +@Service +public class OssServiceImpl implements OssService { + + @Override + public OssPolicySignVo getPolicySign() { + // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。 + String endpoint = "oss-cn-guangzhou.aliyuncs.com"; + // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。 + String accessKeyId = "LTAI5tHvNJT7M9YZJ9BSmURK"; + String accessKeySecret = "OzH0ea3w8fgjrll9P0XTQlqmEg3Cky"; + // 填写Bucket名称,例如examplebucket。 + String bucketName = "qsjslservice"; + // 创建OSSClient实例。 + String accessUrl = "https://"+bucketName+"."+endpoint; + OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM/dd"); + String dir = "jsl/" + sdf.format(new Date()); + + + long expireTime = 30; + long expireEndTime = System.currentTimeMillis() + expireTime * 1000; + Date expiration = new Date(expireEndTime); + PolicyConditions policyConds = new PolicyConditions(); + policyConds.addConditionItem(PolicyConditions.COND_CONTENT_LENGTH_RANGE, 0, 1048576000); + policyConds.addConditionItem(MatchMode.StartWith, PolicyConditions.COND_KEY, dir); + + String postPolicy = ossClient.generatePostPolicy(expiration, policyConds); + byte[] binaryData = new byte[0]; + try { + binaryData = postPolicy.getBytes("utf-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + String encodedPolicy = BinaryUtil.toBase64String(binaryData); + String postSignature = ossClient.calculatePostSignature(postPolicy); + OssPolicySignVo policySignVo = new OssPolicySignVo(); + policySignVo.setAccessId(accessKeyId); + policySignVo.setPolicy(encodedPolicy); + policySignVo.setSignature(postSignature); + policySignVo.setHost(accessUrl); + policySignVo.setExpire(expireEndTime / 1000); + policySignVo.setDir(dir); + return policySignVo; + } + + public static void main(String[] args) { + OssPolicySignVo v = new OssServiceImpl().getPolicySign(); + System.out.println(JsonUtil.objectToJson(v)); + } + +} diff --git a/src/main/java/com/qs/serve/modules/sys/controller/SysAttachController.java b/src/main/java/com/qs/serve/modules/sys/controller/SysAttachController.java index 10eefc84..19387a1e 100644 --- a/src/main/java/com/qs/serve/modules/sys/controller/SysAttachController.java +++ b/src/main/java/com/qs/serve/modules/sys/controller/SysAttachController.java @@ -87,6 +87,13 @@ public class SysAttachController { return R.error("上传失败"); } + @PostMapping("/save") + public R upload(@RequestBody SysAttach attach){ + attach.setId(null); + sysAttachService.save(attach); + return R.ok(attach); + } + /** * 根据ID查询