OSS获得阿里云服务端签名——服务端签名后直传

你的名字 2021-07-24 12:48 700阅读 0赞

一 任务

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NoZW5ncWl1bWluZw_size_16_color_FFFFFF_t_70

完成上图的第1步和第2步。

二 参考

https://help.aliyun.com/document_detail/31926.html?spm=a2c4g.11186623.6.1711.4d777815zWYCD0

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NoZW5ncWl1bWluZw_size_16_color_FFFFFF_t_70 1

三 创建第三方服务微服务

1 配置依赖

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-parent</artifactId>
  8. <version>2.2.1.RELEASE</version>
  9. <relativePath/> <!-- lookup parent from repository -->
  10. </parent>
  11. <groupId>com.atguigu.gulimall</groupId>
  12. <artifactId>gulimall-third-party</artifactId>
  13. <version>0.0.1-SNAPSHOT</version>
  14. <name>gulimall-third-party</name>
  15. <description>第三方服务</description>
  16. <properties>
  17. <java.version>1.8</java.version>
  18. <!-- <spring-cloud.version>Hoxton.RC1</spring-cloud.version>-->
  19. <spring-cloud.version>Greenwich.SR3</spring-cloud.version>
  20. </properties>
  21. <dependencies>
  22. <!-- 依赖公共服务-->
  23. <dependency>
  24. <groupId>com.atguigu.gulimall</groupId>
  25. <artifactId>gulimall-common</artifactId>
  26. <version>0.0.1-SNAPSHOT</version>
  27. <exclusions>
  28. <!-- 排除mybatis-plus -->
  29. <exclusion>
  30. <groupId>com.baomidou</groupId>
  31. <artifactId>mybatis-plus-boot-starter</artifactId>
  32. </exclusion>
  33. </exclusions>
  34. </dependency>
  35. <dependency>
  36. <groupId>org.springframework.boot</groupId>
  37. <artifactId>spring-boot-starter-web</artifactId>
  38. </dependency>
  39. <dependency>
  40. <groupId>org.springframework.cloud</groupId>
  41. <artifactId>spring-cloud-starter-openfeign</artifactId>
  42. </dependency>
  43. <!-- SpringCloud Alibaba-OSS 进行文件上传-->
  44. <dependency>
  45. <groupId>com.alibaba.cloud</groupId>
  46. <artifactId>spring-cloud-starter-alicloud-oss</artifactId>
  47. </dependency>
  48. <dependency>
  49. <groupId>org.springframework.boot</groupId>
  50. <artifactId>spring-boot-starter-test</artifactId>
  51. <scope>test</scope>
  52. <exclusions>
  53. <exclusion>
  54. <groupId>org.junit.vintage</groupId>
  55. <artifactId>junit-vintage-engine</artifactId>
  56. </exclusion>
  57. </exclusions>
  58. </dependency>
  59. </dependencies>
  60. <dependencyManagement>
  61. <dependencies>
  62. <!-- SpringCloud的依赖管理 -->
  63. <dependency>
  64. <groupId>org.springframework.cloud</groupId>
  65. <artifactId>spring-cloud-dependencies</artifactId>
  66. <version>${spring-cloud.version}</version>
  67. <type>pom</type>
  68. <scope>import</scope>
  69. </dependency>
  70. <!-- SpringCloud Alibaba的依赖管理-->
  71. <dependency>
  72. <groupId>com.alibaba.cloud</groupId>
  73. <artifactId>spring-cloud-alibaba-dependencies</artifactId>
  74. <version>2.1.0.RELEASE</version>
  75. <type>pom</type>
  76. <scope>import</scope>
  77. </dependency>
  78. </dependencies>
  79. </dependencyManagement>
  80. <build>
  81. <plugins>
  82. <plugin>
  83. <groupId>org.springframework.boot</groupId>
  84. <artifactId>spring-boot-maven-plugin</artifactId>
  85. </plugin>
  86. </plugins>
  87. </build>
  88. <repositories>
  89. <repository>
  90. <id>spring-milestones</id>
  91. <name>Spring Milestones</name>
  92. <url>https://repo.spring.io/milestone</url>
  93. </repository>
  94. </repositories>
  95. </project>

2 配置bootstrap.properties

  1. # 配置服务名
  2. spring.application.name=gulimall-third-party
  3. # 配置中心信息
  4. spring.cloud.nacos.config.server-addr=127.0.0.1:8848
  5. spring.cloud.nacos.config.namespace=7a4b5a41-ed40-4f37-9482-354e0002a783
  6. # 配置oss相关配置
  7. spring.cloud.nacos.config.ext-config[0].data-id=oss.yml
  8. spring.cloud.nacos.config.ext-config[0].group=DEFAULT_GROUP
  9. spring.cloud.nacos.config.ext-config[0].refresh=true

3 配置application.properties

  1. spring:
  2. cloud:
  3. nacos:
  4. discovery:
  5. server-addr: 127.0.0.1:8848
  6. alicloud:
  7. access-key: XXXXXXXXXXX
  8. secret-key: XlKSpUcIILsdjYWuZXrRRwVbX4XlQ5
  9. oss:
  10. endpoint: oss-cn-chengdu.aliyuncs.com
  11. bucket: gulimall-cakin
  12. application:
  13. name: gulimall-third-party
  14. server:
  15. port: 30000

4 配置服务注册和发现

  1. // 开启服务注册发现
  2. @EnableDiscoveryClient
  3. @SpringBootApplication
  4. public class GulimallThirdPartyApplication {
  5. public static void main(String[] args) {
  6. SpringApplication.run(GulimallThirdPartyApplication.class, args);
  7. }
  8. }

5 控制器

  1. package com.atguigu.gulimall.thirdparty.controller;
  2. import com.aliyun.oss.OSS;
  3. import com.aliyun.oss.common.utils.BinaryUtil;
  4. import com.aliyun.oss.model.MatchMode;
  5. import com.aliyun.oss.model.PolicyConditions;
  6. import com.atguigu.common.utils.R;
  7. import org.springframework.beans.factory.annotation.Autowired;
  8. import org.springframework.beans.factory.annotation.Value;
  9. import org.springframework.web.bind.annotation.RequestMapping;
  10. import org.springframework.web.bind.annotation.RestController;
  11. import java.text.SimpleDateFormat;
  12. import java.util.Date;
  13. import java.util.LinkedHashMap;
  14. import java.util.Map;
  15. /**
  16. * @className: OssController
  17. * @description: 对象存储控制器
  18. * @date: 2020/10/29
  19. * @author: cakin
  20. */
  21. @RestController
  22. public class OssController {
  23. @Autowired
  24. OSS ossClient;
  25. /**
  26. * 端点
  27. */
  28. @Value("${spring.cloud.alicloud.oss.endpoint}")
  29. private String endpoint;
  30. /**
  31. * bucket
  32. */
  33. @Value("${spring.cloud.alicloud.oss.bucket}")
  34. private String bucket;
  35. /**
  36. * access-key
  37. */
  38. @Value("${spring.cloud.alicloud.access-key}")
  39. private String accessId;
  40. /**
  41. * 功能描述:获得上传policy和签名
  42. *
  43. * @author cakin
  44. * @date 2020/10/29
  45. * @return R 签名数据
  46. */
  47. @RequestMapping("/oss/policy")
  48. public R policy() {
  49. String host = "https://" + bucket + "." + endpoint; // host的格式为 https:// + bucketname + endpoint
  50. // callbackUrl为 上传回调服务器的URL,请将下面的IP和Port配置为您自己的真实信息。
  51. // String callbackUrl = "http://88.88.88.88:8888";
  52. String format = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
  53. String dir = format + "/"; // 用户上传文件时指定的前缀。
  54. Map<String, String> respMap = null;
  55. try {
  56. long expireTime = 30;
  57. long expireEndTime = System.currentTimeMillis() + expireTime * 1000;
  58. // 30 s 超时
  59. Date expiration = new Date(expireEndTime);
  60. PolicyConditions policyConds = new PolicyConditions();
  61. policyConds.addConditionItem(PolicyConditions.COND_CONTENT_LENGTH_RANGE, 0, 1048576000);
  62. policyConds.addConditionItem(MatchMode.StartWith, PolicyConditions.COND_KEY, dir);
  63. String postPolicy = ossClient.generatePostPolicy(expiration, policyConds);
  64. byte[] binaryData = postPolicy.getBytes("utf-8");
  65. String encodedPolicy = BinaryUtil.toBase64String(binaryData);
  66. String postSignature = ossClient.calculatePostSignature(postPolicy);
  67. respMap = new LinkedHashMap<String, String>();
  68. // access-key
  69. respMap.put("accessid", accessId);
  70. // 策略
  71. respMap.put("policy", encodedPolicy);
  72. // 策略签名
  73. respMap.put("signature", postSignature);
  74. // 用户上传文件时指定的前缀
  75. respMap.put("dir", dir);
  76. // 主机
  77. respMap.put("host", host);
  78. // 过期时间
  79. respMap.put("expire", String.valueOf(expireEndTime / 1000));
  80. // respMap.put("expire", formatISO8601Date(expiration));
  81. } catch (Exception e) {
  82. // Assert.fail(e.getMessage());
  83. System.out.println(e.getMessage());
  84. }
  85. return R.ok().put("data", respMap);
  86. }
  87. }

四 测试

1 postman测试结果

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NoZW5ncWl1bWluZw_size_16_color_FFFFFF_t_70 2

五 通过网关测试

1 网关配置

  1. - id: third_party_route
  2. uri: lb://gulimall-third-party
  3. predicates:
  4. - Path=/api/thirdparty/**
  5. filters:
  6. - RewritePath=/api/thirdparty/(?<segment>.*),/$\{segment}

2 测试

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NoZW5ncWl1bWluZw_size_16_color_FFFFFF_t_70 3

发表评论

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

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

相关阅读