0
点赞
收藏
分享

微信扫一扫

4.10阿里云 OSS 对象存储 配置(文件上传)

一世独秀 2022-03-11 阅读 78

阿里云 OSS 对象存储 配置(文件上传)

1.创建新模块(qilemo-third-party);

Group:com.qilemo
Artifact:qilemo-third-party
Type:Maven Project
Language:Java
Packaging:Jar
Java Version:11
Version:0.0.1-SNAPSHOT
Name:qilemo-third-party
Description:第三方插件
Package:com.qilemo.thirdparty

2.选择需要的组件;

Web:
	Spring Web
Spring Cloud Routing:
	OpenFeign

3.在 pom.xml 项目配置文件中添加 qilemo-common 依赖,并排除掉和数据库有关的依赖;

        <dependency>
            <groupId>com.qilemo</groupId>
            <artifactId>qilemo-common</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <!--排除与数据库交互-->
            <exclusions>
                <exclusion>
                    <groupId>com.baomidou</groupId>
                    <artifactId>mybatis-plus-boot-starter</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

4.将 aliyun-oss-spring-boot-starter 也添加到 pom.xml 项目配置文件中;

        <!--ali仓储服务-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alicloud-oss</artifactId>
            <version>2.2.0.RELEASE</version>
        </dependency>

5.开启 nacos 注册发现,配置管理服务;

5.1开启注册发现

@EnableDiscoveryClient
@SpringBootApplication
public class QilemoThirdPartyApplication {

    public static void main(String[] args) {
        SpringApplication.run(QilemoThirdPartyApplication.class, args);
    }

}

5.2在 nacos 客户端中添加 第三方插件 微服务的命名空间(qilemo-third-party);

5.3在 第三方插件 命名空间下添加 配置文件 qilemo-third-party.properties (dev);

spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
spring.application.name=qilemo-third-party

spring.cloud.alicloud.access-key=LTAI5t5eDs6z8QgHFHMdpsVT
spring.cloud.alicloud.secret-key=xyZAiQhPBPYBuPGCqlut2e5dOI829l
spring.cloud.alicloud.oss.endpoint=oss-cn-shenzhen.aliyuncs.com
spring.cloud.alicloud.oss.bucket=qilemo

server.port=20004

5.4在本地第三方插件微服务中添加 bootstrap.properties 配置管理配置文件;

spring.cloud.nacos.config.server-addr=localhost:8848
spring.application.name=qilemo-third-party

spring.cloud.nacos.config.server-addr=localhost:8848
spring.application.name=qilemo-third-party

spring.cloud.nacos.config.namespace=c3891a34-d4ec-4848-84d0-e2eb72197744
spring.cloud.nacos.config.group=dev

6.配置 服务端签名直传并设置上传回调 ;

6.1创建 class OssController.java 请求类;

@RestController
public class OssController {
    @Autowired
    OSS ossClient;

    @Value("${spring.cloud.alicloud.access-key}")
    String accessId;
//    @Value("${alibaba.cloud.secret-key}")
//    String accessKey;
    @Value("${spring.cloud.alicloud.oss.endpoint}")
    String endpoint;
    @Value("${spring.cloud.alicloud.oss.bucket}")
    String bucket;

    @RequestMapping("/oss/policy")
    public R policy() {

//        String accessId = "<yourAccessKeyId>"; // 请填写您的AccessKeyId。
//        String accessKey = "<yourAccessKeySecret>"; // 请填写您的AccessKeySecret。
//        String endpoint = "oss-cn-hangzhou.aliyuncs.com"; // 请填写您的 endpoint。
//        String bucket = "bucket-name"; // 请填写您的 bucketname 。

        String host = "https://" + bucket + "." + endpoint; // host的格式为 bucketname.endpoint

        // callbackUrl为上传回调服务器的URL,请将下面的IP和Port配置为您自己的真实信息。
//        String callbackUrl = "http://88.88.88.88:8888";

        String date = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
        String dir = date+"/"; // 用户上传文件时指定的前缀。

        // 创建OSSClient实例。
//        OSS ossClient = new OSSClientBuilder().build(endpoint, accessId, accessKey);
        Map<String, String> respMap = null;
        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 = new LinkedHashMap<String, String>();
            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));
            // respMap.put("expire", formatISO8601Date(expiration));
        } catch (Exception e) {
            // Assert.fail(e.getMessage());
            System.out.println(e.getMessage());
        } finally {
            ossClient.shutdown();
        }
        return R.ok().put("data",respMap);
    }

}

6.2启动微服务,在浏览器中访问地址:localhost:20004/oss/policy

如果可以正常访问,表示连通。

{"msg":"success","code":0,"data":{"accessid":"LTAI5t5eDs6z8QgHFHMdpsVT","policy":"eyJleHBpcmF0aW9uIjoiMjAyMi0wMi0xOFQyMDoxMzoxMy4xMjhaIiwiY29uZGl0aW9ucyI6W1siY29udGVudC1sZW5ndGgtcmFuZ2UiLDAsMTA0ODU3NjAwMF0sWyJzdGFydHMtd2l0aCIsIiRrZXkiLCIyMDIyLTAyLTE5LyJdXX0=","signature":"fXqYcbz1KjgQPIAmpzoWKpDD7FQ=","dir":"2022-02-19/","host":"https://qilemo.oss-cn-shenzhen.aliyuncs.com","expire":"1645215193"}}

7.添加新的路由规则,使其将上传功能的请求转发给第三方服务;

修改网关的配置文件 application.yml,在 商品服务 路由下方添加此路由,(admin-route路由上方)

        #       第三方服务路由        - id: thirdparty-route          uri: lb://qilemo-third-party          predicates:            - Path=/api/thirdparty/**          filters:            - RewritePath=/api/thirdparty/(?<segment>.*), /$\{segment}

再次测试连通性;

访问网关地址:localhost:88/api/thirdparty/oss/policy

显示如上数据表示连通。

如果测试上传时,不显示图片,但是可以正确上传和显示路径,原因是:oss仓库的权限设置为了私有,需要更改为可读,或者可读写。

举报

相关推荐

0 条评论