阿里----OSS对象存储服务

Love The Way You Lie 2023-02-22 05:24 297阅读 0赞

第一步、开启OSS服务,创建一个Bucket、创建一个用户并开启OSS权限

在这里插入图片描述
名称和地区根据自己需求填写,除了括出来的其他默认即可,创建bucket
在这里插入图片描述

创建一个AccessKey用户

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
创建好后,再次点击AccessKey管理
在这里插入图片描述
获取下面的两个字段信息,后面需要使用它来进行OSS对象管理
在这里插入图片描述

开启OSS跨域

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


第二步、引入依赖、添加配置

引入依赖

  1. <!-- spring-cloud-starter-alicloud-oss OSS对象存储服务-->
  2. <dependency>
  3. <groupId>com.alibaba.cloud</groupId>
  4. <artifactId>spring-cloud-starter-alicloud-oss</artifactId>
  5. <version>${alicloud-oss.version}</version>
  6. </dependency>

添加配置

  1. spring:
  2. application:
  3. name: cloud-oss
  4. cloud:
  5. alicloud:
  6. access-key: OSS用户的AccessKey ID
  7. secret-key: OSS用户的AccessKey SECRET
  8. oss:
  9. endpoint: 访问的节点域名,例如:oss-cn-shenzhen.aliyuncs.com
  10. bucket: yumbo-oss #这个根据自己的bucket名称填写,启动器没有本身没有这个配置

在这里插入图片描述

OSS的文档地址
Github文档地址(https://github.com/alibaba/spring-cloud-alibaba/blob/master/spring-cloud-alibaba-docs/src/main/asciidoc-zh/oss.adoc)

后端签名后通过javascript直传

文档地址

签名信息获取

编写一个Controller
示例代码如下

  1. import com.alibaba.fastjson.JSONObject;
  2. import com.aliyun.oss.OSSClient;
  3. import com.aliyun.oss.common.utils.BinaryUtil;
  4. import com.aliyun.oss.model.MatchMode;
  5. import com.aliyun.oss.model.PolicyConditions;
  6. import org.springframework.web.bind.annotation.CrossOrigin;
  7. import org.springframework.web.bind.annotation.GetMapping;
  8. import org.springframework.web.bind.annotation.RestController;
  9. import java.io.UnsupportedEncodingException;
  10. import java.sql.Date;
  11. import java.time.LocalDate;
  12. import java.util.LinkedHashMap;
  13. import java.util.Map;
  14. import java.util.TimeZone;
  15. @RestController
  16. public class OssController {
  17. @GetMapping("/asign")
  18. @CrossOrigin //开启跨域访问
  19. public String policyAsign() {
  20. String accessId = "LTAI4GG2L691UsdkKUmE3qP8"; // 请填写您的 AccessKeyId。
  21. String accessKey = "q12TVvTqJTftUrKVO1xYkFO9D1vHRS"; // 请填写您的 AccessKeySecret。
  22. String endpoint = "oss-cn-shenzhen.aliyuncs.com"; // 请填写您的 endpoint。
  23. String bucket = "yumbo-oss.oss-cn-shenzhen.aliyuncs.com"; // 请填写您的 bucketname 。
  24. String host = "http://" + bucket + "." + endpoint; // host的格式为 bucketname.endpoint
  25. // callbackUrl为 上传回调服务器的URL,请将下面的IP和Port配置为您自己的真实信息。
  26. TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));
  27. String dir = LocalDate.now().toString();// 用户上传文件时指定的前缀。我这里设置日期为前缀
  28. OSSClient client = new OSSClient(endpoint, accessId, accessKey);
  29. long expireTime = 30;
  30. long expireEndTime = System.currentTimeMillis() + expireTime * 1000;
  31. Date expiration = new Date(expireEndTime);
  32. PolicyConditions policyConds = new PolicyConditions();
  33. policyConds.addConditionItem(PolicyConditions.COND_CONTENT_LENGTH_RANGE, 0, 1048576000);
  34. policyConds.addConditionItem(MatchMode.StartWith, PolicyConditions.COND_KEY, dir);
  35. String postPolicy = client.generatePostPolicy(expiration, policyConds);
  36. byte[] binaryData = new byte[0];
  37. try {
  38. binaryData = postPolicy.getBytes("utf-8");
  39. } catch (UnsupportedEncodingException e) {
  40. e.printStackTrace();
  41. }
  42. String encodedPolicy = BinaryUtil.toBase64String(binaryData);
  43. String postSignature = client.calculatePostSignature(postPolicy);
  44. Map<String, Object> respMap = new LinkedHashMap<String, Object>();
  45. respMap.put("accessid", accessId);
  46. respMap.put("policy", encodedPolicy);
  47. respMap.put("signature", postSignature);
  48. respMap.put("dir", dir);
  49. respMap.put("host", host);
  50. respMap.put("expire", String.valueOf(expireEndTime / 1000));
  51. // respMap.put("expire", formatISO8601Date(expiration));
  52. JSONObject jasonCallback = new JSONObject();
  53. // jasonCallback.put("callbackUrl", callbackUrl);
  54. jasonCallback.put("callbackBody",
  55. "filename=${object}&size=${size}&mimeType=${mimeType}&height=${imageInfo.height}&width=${imageInfo.width}");
  56. jasonCallback.put("callbackBodyType", "application/x-www-form-urlencoded");
  57. String base64CallbackBody = BinaryUtil.toBase64String(jasonCallback.toString().getBytes());
  58. respMap.put("callback", base64CallbackBody);
  59. return new JSONObject(respMap).toJSONString();//将签名数据暴露出去
  60. }
  61. }

为了聚合服务,所有的请求都经过网关先过滤
所以添加一个路由配置

  1. spring:
  2. cloud:
  3. gateway:
  4. routes:
  5. - id: third_party_route
  6. uri: lb://要负载均衡到的Oss服务名
  7. predicates:
  8. - Path=/api/thirdparty/**
  9. filters:
  10. - RewritePath=/api/thirdparty/(?<segment>.*),/$\{ segment}

发表评论

表情:
评论列表 (有 0 条评论,297人围观)

还没有评论,来说两句吧...

相关阅读