阿里云文件存储
-
采用服务端签名后直传的方式,不将图片传给服务端,而是从服务端获取签名,绕过服务端直接上传到OSS阿里云服务器,具体实例操作如下:
-
第一步,引入阿里云OSS上传坐标,配置上传所需的accesskey等信息:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alicloud-oss</artifactId>
</dependency>
spring:
application:
name: mall-product
alicloud:
# 这里填写获取的access-key,secret-key信息,这一步建议新增一个Access用户专门管理文件上传模块。
access-key: xxx
secret-key: xxx
oss:
# 这里填写你选择的OSS服务地址,即所选在哪个区
endpoint: oss-cn-guangzhou.aliyuncs.com
bucket: xxx
- 第二步,编写获取签名的接口,供前端访问该接口并获取签名。
@RestController
public class OssController {
@Autowired
OSS ossClient;
@Value("${spring.cloud.alicloud.oss.endpoint}")
private String endPoint;
@Value("${spring.cloud.alicloud.oss.bucket}")
private String bucket;
@Value("${spring.cloud.alicloud.access-key}")
private String accessId;
@Value("${spring.cloud.alicloud.secret-key}")
private String accessKeySecret;
@RequestMapping("/oss/policy")
public R policy() {
//https://gulimall-clouds.oss-cn-beijing.aliyuncs.com/iqiyi.png
// Endpoint以杭州为例,其它Region请按实际情况填写。
String host = "https://" + bucket + "." + endPoint; // host的格式为 bucketname.endpoint
// callbackUrl为 上传回调服务器的URL,请将下面的IP和Port配置为您自己的真实信息。
//String callbackUrl = "http://88.88.88.88:8888";
String format = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
String dir = format + "/"; // 用户上传文件时指定的前缀。
// 创建OSSClient实例。
//OSS ossClient = new OSSClientBuilder().build(endPoint, accessId, accessKeySecret);
Map<String, String> respMap = null;
try {
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 = postPolicy.getBytes("utf-8");
String encodedPolicy = BinaryUtil.toBase64String(binaryData);
String postSignature = ossClient.calculatePostSignature(postPolicy