6 changed files with 143 additions and 0 deletions
@ -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; |
|||
|
|||
} |
@ -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(); |
|||
|
|||
|
|||
} |
@ -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)); |
|||
} |
|||
|
|||
} |
Loading…
Reference in new issue