SpringBoot集成腾讯云COS对象存储

前言

腾讯云COS对象存储容量包是一种云存储服务,它可以帮助用户存储和管理海量数据。这种服务的主要作用是解决数据存储和管理方面的问题,使得用户可以更加方便地进行数据备份、共享和传输等操作。


一、准备资料

需要现在腾讯云中获取以下资料
  • 密钥id
  • 密钥key
  • 所属区域
  • 存储桶名称
  • COS存储文件夹(自己创建的,方便管理)
  • 访问地址

二、yml配置文件

# 腾讯云COS
cos:
  # 密钥id
  secretId: *****
  # 密钥key
  secretKey: *****
  # 所属区域
  bucket: ap-nanjing
  # 存储桶名称
  bucketName: *-1320852402
  # COS存储文件夹
  folder: /自定义/
  # 访问地址
  webUrl: https://*.cos.ap-nanjing.myqcloud.com

三、创建实体映射

代码如下(示例):

package com.ruoyi.common.config;

import com.qcloud.cos.COSClient;
import com.qcloud.cos.ClientConfig;
import com.qcloud.cos.auth.BasicCOSCredentials;
import com.qcloud.cos.auth.COSCredentials;
import com.qcloud.cos.region.Region;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

@Component
@Data
@ConfigurationProperties(prefix = "cos")
public class CosConfig {

    /** 项目名称 */
    private String secretId;

    /** 版本 */
    private String secretKey;

    /** 所属区域 */
    private String bucket;

    /** 存储桶名称 */
    private String bucketName;

    /** COS存储文件夹 */
    private String folder;

    /** 访问路径 */
    private String webUrl;

}

三、上传工具类

代码如下(示例):

package com.ruoyi.common.utils;

import com.qcloud.cos.COSClient;
import com.qcloud.cos.ClientConfig;
import com.qcloud.cos.auth.BasicCOSCredentials;
import com.qcloud.cos.auth.COSCredentials;
import com.qcloud.cos.model.PutObjectRequest;
import com.qcloud.cos.model.PutObjectResult;
import com.qcloud.cos.region.Region;
import com.ruoyi.common.config.CosConfig;
import com.ruoyi.common.utils.uuid.UUID;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;

@Component
public class CosFileUtils {

    @Autowired
    private CosConfig cosConfig;


    /**
     * 文件上传到COS对象存储
     * @param multipartFile
     * @return
     */
    public String cosUpload(MultipartFile multipartFile){
        String oldFileName = multipartFile.getOriginalFilename();  // 获取文件名字
        String eName = oldFileName.substring(oldFileName.lastIndexOf(".")); // 获取文件后缀
        String newFileName = UUID.fastUUID() + eName; // 使用 UUID生成字符串,再与后缀结合生成新名字
        // 1 初始化用户身份信息(secretId, secretKey)
        COSCredentials cred = new BasicCOSCredentials(cosConfig.getSecretId(), cosConfig.getSecretKey());
        // 2 设置bucket的区域, COS地域的简称请参照 https://cloud.tencent.com/document/product/436/6224
        ClientConfig clientConfig = new ClientConfig(new Region(cosConfig.getBucket()));
        // 3 生成cos客户端
        COSClient cosclient = new COSClient(cred, clientConfig);
        // bucket的命名规则为{name}-{appid} ,此处填写的存储桶名称必须为此格式
        String bucketName = cosConfig.getBucketName();
        // 简单文件上传, 最大支持 5 GB, 适用于小文件上传, 建议 20 M 以下的文件使用该接口
        // 大文件上传请参照 API 文档高级 API 上传
        File localFile = null;
        try {
            localFile = File.createTempFile("temp", null);
            multipartFile.transferTo(localFile);
        } catch (IOException e) {
            e.printStackTrace();
        }
        // 指定要上传到 COS 上的路径
        String key = cosConfig.getFolder() + datePath() + "/" + newFileName;
        PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, localFile);
        PutObjectResult putObjectResult = cosclient.putObject(putObjectRequest);
        // 关闭客户端(关闭后台线程)
        cosclient.shutdown();
        // 返回存储路径
        return cosConfig.getWebUrl()+key;
    }
    
	/**
     * 日期路径 即年/月/日 如2000/01/01
     */
	public static String datePath(){
        Date now = new Date();
        return DateFormatUtils.format(now, "yyyy/MM/dd");
    }

}

总结

例如:以上就是SpringBoot对腾讯云COS的整合,最终结果调用cosUpload()方法会返回一个外网URL地址,通过地址可以直接访问到图片,页面可直接渲染

你可能感兴趣的:(spring,boot,腾讯云,java)