使用腾讯云COS对象存储(详细流程)

一、开通COS对象存储

 二、创建存储桶

 基本信息

  • 所属地域:请选择与您业务(或用户数量)相对集中的物理区域所对应的 COS 地域,设置后不可修改。地域的更多信息请参见 地域和访问域名
  • 名称:请输入自定义的存储桶名称。设置后不可修改。命名说明请参见存储桶的 命名规范
  • 访问权限:存储桶默认提供三种访问权限:私有读写、公有读私有写和公有读写,设置后仍可修改。详细信息请参见 存储桶访问权限
  • 请求域名:自动生成。创建完存储桶后,您可以使用该域名对存储桶进行访问。

  • 版本控制:开启后,上传的同名对象将保存历史版本。
  • 日志存储:为您记录跟存储桶操作相关的各种请求日志。
  • 存储桶标签:存储桶标签作为管理存储桶的一个标识,您可以为存储桶设置标签,便于分组管理存储桶,详情请参见 设置存储桶标签
  • 服务端加密:目前存储桶的加密方式支持 SSE-COS 加密(即由 COS 托管密钥的服务端加密)。关于服务端加密的介绍,请参见 服务端加密概述

对存储桶的配置信息进行确认。如需修改,单击上一步即可。

 三、获取秘钥

 

 1.创建子账号

 四、将COS整合到spring Boot项目中

1.导入依赖

<dependency>
       <groupId>com.qcloud</groupId>
       <artifactId>cos_api</artifactId>
       <version>5.6.89</version>
</dependency>

2.导入配置信息可放入yml文件中,使用工具类读取(相对安全)

 

tencent:
  cos:
    #腾讯云对象存储参数
    #腾讯云账户secretId,secretKey
    secretId: 
    secretKey: 
    #存储桶名称
    buckerName: 
    #地域
    region: ap-shanghai
    #请求域名(使用对应的存储桶和对应的地域)
    url: 

3.工具类


@Component
public class ConstantCosUtils implements InitializingBean {

    @Value("${tencent.cos.secretId}")
    public String secretId;

    @Value("${tencent.cos.secretKey}")
    public String secretKey;

    @Value("${tencent.cos.buckerName}")
    public String buckerName;

    @Value("${tencent.cos.region}")
    public String region;

    @Value("${tencent.cos.url}")
    public String url;

    public static String SECRET_ID;
    public static String SECRET_KEY;
    public static String BUCKET_NAME;
    public static String REGION;
    public static String URL;


    @Override
    public void afterPropertiesSet() throws Exception {
        SECRET_ID = secretId;
        SECRET_KEY = secretKey;
        BUCKET_NAME = buckerName;
        REGION = region;
        URL = url;
    }
}

 4.编写代码

controller

    /**
     * 上传商家logo
     * @return
     */
    @ApiOperation("上传商家logo")
    @PostMapping("/upload")
    public R upload(MultipartFile file) {
        String url = settingReceiptCustomService.upload(file);
        return R.ok(url);
    }

serviceImpl


@Service
public class SettingReceiptCustomServiceImpl extends ServiceImpl<SettingReceiptCustomMapper, SettingReceiptCustom> implements SettingReceiptCustomService {


    @Override
    public String upload(MultipartFile file) {
        COSClient cosClient = initCos();
        try {
            String filename = file.getOriginalFilename();
            InputStream inputStream = file.getInputStream();
            String filePath = getFilePath(filename);
            // 上传文件
            cosClient.putObject(new PutObjectRequest(ConstantCosUtils.BUCKET_NAME, filePath, inputStream, null));
            cosClient.setBucketAcl(ConstantCosUtils.BUCKET_NAME, CannedAccessControlList.PublicRead);

            return ConstantCosUtils.URL + "/" + filePath;
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cosClient.shutdown();
        }
        return null;
    }

    private String getFilePath(String fileName){
        String filePath = "logo/";
        String fileType = fileName.substring(fileName.lastIndexOf("."));
        filePath += IdUtils.randomUUID() + fileType;
        return filePath;
    }

    /**
     * 初始化COSClient
     * @return
     */
    private COSClient initCos(){
        // 1 初始化用户身份信息(secretId, secretKey)
        BasicCOSCredentials credentials = new BasicCOSCredentials(ConstantCosUtils.SECRET_ID, ConstantCosUtils.SECRET_KEY);
        // 2 设置 bucket 的区域, COS 地域的简称请参照
        Region region = new Region(ConstantCosUtils.REGION);
        ClientConfig clientConfig = new ClientConfig(region);
        // 从 5.6.54 版本开始,默认使用了 https
//        clientConfig.setHttpProtocol(HttpProtocol.https);
        // 3 生成 cos 客户端。
        return new COSClient(credentials, clientConfig);
    }
}

猜你喜欢

转载自blog.csdn.net/poker_zero/article/details/125780747