记录一次腾讯云对象存储服务(COS)的使用

本文记录了一次在SpringBoot项目中使用腾讯云对象存储服务(COS)的过程,包括引入依赖、配置参数、创建工具类、上传文件、获取URL等步骤。介绍了如何通过@ConfigurationProperties注入YAML配置、使用InitializingBean接口初始化静态变量、以及在SpringBoot启动和关闭时执行相应操作。此外,还提供了一个PathUtils工具类用于生成文件路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

记录一次腾讯云对象存储服务(COS)的使用

在完成一个练习项目时,有一个头像上传的功能需要使用 对象存储 服务,这里面的知识点还是比较多的,所以在这里记录一下。
这里我选择的是 腾讯云对象存储服务(COS),所以在这里介绍一下 腾讯云对象存储服务(COS) 的使用。
官方文档:腾讯云对象存储服务java SDK官方文档

1. 导入依赖

将下列依赖导入项目的 pom.xml 文件中:

<!--腾讯云对象存储服务cos依赖-->
<dependency>
       <groupId>com.qcloud</groupId>
       <artifactId>cos_api</artifactId>
       <version>5.6.89</version>
</dependency>

2. application.yml写入参数

使用 cos 时,像 secretIdsecretKey 这种参数,一般不会直接写在类中而写在 application.yml 配置文件中,然后通过 @Value@ConfigurationProperties 注解注入到 Spring 类中。
application.yml 配置文件:

cos:
  secretId: xxx			# 密钥id
  secretKey: xxx		# 密钥key
  bucketName: blog-APPID		# 需要使用的存储桶名称
  region: ap-nanjing			# 存储桶地域

secretIdsecretKey 是 腾讯云的 API密钥
bucketName 是需要使用的存储桶名称,存储桶可以提前创建,也可以在项目中使用代码创建,
region存储桶的地域


腾讯云密钥查询入口:API密钥管理
腾讯云COS地域简称:COS地域简称

3. 注入application.yml参数

这里我定义了一个 工具类,用于注入 application.yml 中的 cos 参数,然后方便在其它类中使用 secretId、secretKey 等参数。

package com.mrqin.utils;

import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component		// 声明该类被spring管理
@ConfigurationProperties(prefix = "cos")
@Setter     // 注意:必须有setter方法才能赋值成功
@Slf4j
public class CosPropertiesConstantsUtils implements InitializingBean {
   
   
    private String secretId;
    private String secretKey;
    private String bucketName;
    private String region;

    public static String Tencent_secretId;
    public static String Tencent_secretKey;
    public static String Tencent_bucketName;
    public static String Tencent_region;

    @Override
    public void afterPropertiesSet() throws Exception {
   
   
        Tencent_secretId = secretId;
        Tencent_secretKey = secretKey;
        Tencent_bucketName = bucketName;
        Tencent_region = region;
        log.info("密钥初始化成功");
    }
}

在这里有几个知识点:
快速了解 @ConfigurationProperties
@ConfigurationProperties和@Value孰优孰劣?
@Value @ConfigurationProperties 注释静态变量赋值

@ConfigurationProperties 注解用于批量导入 application.yml 文件中的变量,比 @Value 更加方便。
想要赋值成功,一定要注意:

  1. 启动类或配置类上应该添加 @EnableConfigurationProperties 注解;
  2. 该类必须添加 @Component 注解,表示该类被Spring管理;
  3. 该类必须有属性的 setter 方法,才可以成功进行属性注入,这里使用了 lombok 的 @Setter 注解,简单实现了 setter 方法。

在SpringBoot官方文档中有几个注意点:

  • 属性必须要有getter、setter方法;(由于我的类中是静态变量,所以没有getter)
  • 如果属性的类型是集合,要确保集合是不可变的;
  • 如果使用Lombok自动生成getter/setter方法,一定不要生成对应的任何构造函数,因为Spring IOC容器会自动使用它来实例化对象。
  • 使用JavaBean属性绑定的方式只针对标准 Java Bean 属性,不支持对静态属性的绑定
  • 正如注意事项中的:@Configuration不支持对静态属性的绑定,所以这里使用了 afterPropertiesSet 方法(也可以使用其他方法,如使用set方法为静态变量赋值)。
  • afterPropertiesSet 执行时间:实例化->生成对象->属性填充后会进行afterPropertiesSet方法,所以这里的afterPropertiesSet 方法执行后,就完成了静态变量的赋值。注意使用afterPropertiesSet需要实现InitializingBean。

4. 创建CosUtils工具类

由于 CosUtils 工具类中内容较多,所以完整代码放在最后,感兴趣的大家可以看一下,这里拆分一下:

初始化CosClient:

/**
 * 初始化CosClient实例,在Springboot初始化执行一次,可以保证COSClient实例只有一个
 */
public static void initCosClient() {
   
   
    //----------------------初始化客户端---------------------------
    // 1 初始化用户身份信息(secretId, secretKey)。
    String secretId = CosPropertiesConstantsUtils.Tencent_secretId;
    String secretKey = CosPropertiesConstantsUtils.Tencent_secretKey;
    COSCredentials cred = new
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值