Commit 43b35484 authored by tangtuo's avatar tangtuo

新增获取oss签名等接口

parent b2e98322
......@@ -4,6 +4,7 @@ import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.common.utils.BinaryUtil;
import com.aliyun.oss.model.*;
import com.fzm.common.enums.ResultCode;
import com.fzm.common.exception.GlobalException;
......@@ -18,6 +19,8 @@ import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* @author tangtuo
......@@ -146,6 +149,41 @@ public class OssUtil {
}
public Map<String, String> policy() {
String accessId = ossProperties.getAppKey(); // 请填写您的AccessKeyId。
String accessKey = ossProperties.getAppSecret(); // 请填写您的AccessKeySecret。
String endpoint = ossProperties.getEndPoint(); // 请填写您的 endpoint。
String bucket = ossProperties.getEncryptBucket(); // 请填写您的 bucketname 。
String host = "https://" + bucket + "." + endpoint; // host的格式为 bucketname.endpoint
String dir = DateUtil.format(new Date(), "yyyyMMdd") + "/" + IdUtil.simpleUUID() + "/";
Map<String, String> respMap = new LinkedHashMap<>();
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessId, accessKey);
try {
long expireTime = 30;
long expireEndTime = System.currentTimeMillis() + expireTime * 1000;
Date expiration = new Date(expireEndTime);
// PostObject请求最大可支持的文件大小为5 GB,即CONTENT_LENGTH_RANGE为5*1024*1024*1024。
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 = postPolicy.getBytes("utf-8");
String encodedPolicy = BinaryUtil.toBase64String(binaryData);
String postSignature = ossClient.calculatePostSignature(postPolicy);
respMap.put("accessid", accessId);
respMap.put("policy", encodedPolicy);
respMap.put("signature", postSignature);
respMap.put("dir", dir);
respMap.put("host", host);
respMap.put("expire", String.valueOf(expireEndTime / 1000));
return respMap;
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
throw GlobalException.newException(ResultCode.FILE_UPLOAD_ERROR, e.getMessage());
}
}
public static void main(String[] args) {
String endpoint = "oss-cn-hangzhou.aliyuncs.com";
......
package com.fzm.portal.controller;
import cn.dev33.satoken.annotation.SaCheckLogin;
import com.fzm.common.model.ResponseModel;
import com.fzm.common.utils.OssUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.Map;
/**
* @author tangtuo
* @date 2021/7/13 10:34
*/
@RestController
@RequestMapping("/oss")
@Api(tags = "oss相关")
public class OssController {
@Resource
private OssUtil ossUtil;
@SaCheckLogin
@GetMapping("/policy")
@ApiOperation("完成oss签名")
public ResponseModel<Map<String, String>> policy() {
Map<String, String> policy = ossUtil.policy();
return ResponseModel.success(policy);
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment