前言
腾讯云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地址,通过地址可以直接访问到图片,页面可直接渲染