| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- package com.chuanghai.ihotel.controller;
- 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.chuanghai.ihotel.common.exception.BizCodeEnume;
- import com.chuanghai.ihotel.common.exception.RRException;
- import com.chuanghai.ihotel.common.utils.CommonResult;
- import com.chuanghai.ihotel.vo.AliyunOssPolicyVO;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.web.bind.annotation.GetMapping;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RestController;
- import java.time.LocalDate;
- import java.time.LocalDateTime;
- import java.time.ZoneOffset;
- import java.util.Date;
- @RestController
- @RequestMapping("oss")
- public class OssController {
- @Value("${aliyun.oss.endpoint}")
- private String endpoint;
- @Value("${aliyun.oss.bucket}")
- private String bucket;
- @Value("${aliyun.oss.access-key}")
- private String accessKey;
- @Value("${aliyun.oss.secret-key}")
- private String accessKeySecret;
- /**
- * 获取上传文件签名
- * @apiNote 用于文件上传时获取上传文件签名,采用服务器签名后直传的方式进行文件上传,
- * 具体文档参考:https://help.aliyun.com/document_detail/31926.html
- */
- @GetMapping("/aliyun/policy")
- public CommonResult<AliyunOssPolicyVO> policy() {
- String host = "https://" + bucket + "." + endpoint;
- String dir = LocalDate.now().toString() + "/"; // 用户上传文件时指定的前缀。
- // oss 客户端
- OSS ossClient = new OSSClientBuilder().build(endpoint, accessKey, accessKeySecret);
- try {
- // 过期时间
- LocalDateTime expireEndTime = LocalDateTime.now().plusMinutes(30);
- 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(Date.from(expireEndTime.toInstant(ZoneOffset.of("+8"))), policyConds);
- byte[] binaryData = postPolicy.getBytes("utf-8");
- String encodedPolicy = BinaryUtil.toBase64String(binaryData);
- String postSignature = ossClient.calculatePostSignature(postPolicy);
- AliyunOssPolicyVO aliyunOssPolicyVO = AliyunOssPolicyVO.builder()
- .accessId(accessKey)
- .policy(encodedPolicy)
- .signature(postSignature)
- .dir(dir)
- .host(host)
- .expire(String.valueOf(expireEndTime.toEpochSecond(ZoneOffset.of("+8"))))
- .build();
- return CommonResult.ok().setResult(aliyunOssPolicyVO);
- } catch (Exception e) {
- throw new RRException(BizCodeEnume.FILE_UPLOAD_ERROR, e.getMessage());
- } finally {
- ossClient.shutdown();
- }
- }
- }
|