腾讯云对象存储(Cloud Object Storage,COS)是腾讯云提供的一种高可用、高持久性的云存储服务。它允许用户在云端存储和管理大规模的非结构化数据,比如图片、视频、文档等。
话不多说,想必你都已经开始用cos了,就不用过多介绍了。
如果不懂的可以去开发文档去看看对象存储 简介-API 文档-文档中心-腾讯云 (tencent.com)
一、准备cos环境
1、创建cos存储桶
选择你自己想要的数据填写资料,如果你只是简单的存储,可以选择公有读私有写,填写完之后,无脑下一步。
2、授权
如果是子用户的话,这里可以给子用户授权
3、配置跨域
下一步就是要配置跨域,来源 * 代表所有。
4、API密钥
我这里因为是新账号所以需要新建密钥
注意:推荐使用子用户,新建之后记得保存
到这里就完成了cos环境的搭建
二、springboot整合COS
1、导入cos依赖
<dependency>
<groupId>com.qcloud</groupId>
<artifactId>cos_api</artifactId>
<version>5.6.54</version>
</dependency>
2、代码演示
2.1、配置cos参数
cos:
baseUrl: 存储桶.cos.ap-guangzhou.myqcloud.com
accessKey: 刚才新建的密钥 SecretId
secretKey: 刚才新建的密钥 SecretKey
regionName: ap-guangzhou # 所属地域
bucketName: 存储桶
folderPrefix: /files # 文件夹
2.2、cos工具类
/**
* 腾讯云COS文件上传工具类
*/
@Slf4j
public class COSClientUtil {
/**
* 获取配置信息
*/
private static COSConfig cosConfig = SpringBeanUtils.getBean(COSConfig.class);
/**
* 初始化用户身份信息
*/
private static COSCredentials cred = new BasicCOSCredentials(cosConfig.getAccessKey(), cosConfig.getSecretKey());
/**
* 设置bucket的区域
*/
private static ClientConfig clientConfig = new ClientConfig(new Region(cosConfig.getRegionName()));
/**
* 生成COS客户端
*/
private static COSClient cosClient = new COSClient(cred, clientConfig);
private static PoolingHttpClientConnectionManager connectionManager;
public static void initializeConnectionManager() {
// 在这里初始化连接池
connectionManager = createConnectionManager();
}
private static PoolingHttpClientConnectionManager createConnectionManager() {
// 创建并配置连接池
return new PoolingHttpClientConnectionManager();
}
/**
* 上传文件到COS
*
* @param inputStream 流
* @param key 文件名称
* @return
*/
public static String uploadFileToCOS(InputStream inputStream, String key) throws InterruptedException, IOException, NoSuchAlgorithmException, KeyStoreException {
// 每次上传前重新初始化连接池
initializeConnectionManager();
PutObjectRequest putObjectRequest = new PutObjectRequest(cosConfig.getBucketName(), key, inputStream, null);
TransferManager transferManager = new TransferManager(cosClient);
try {
Upload upload = transferManager.upload(putObjectRequest);
upload.waitForCompletion(); // 等待上传完成
String filePath = cosConfig.getBaseUrl() + "/" + key;
return filePath;
} finally {
// cosClient.shutdown(); // 关闭 COS 客户端
}
}
}
2.3、控制层
@GetMapping( "/uploadFileToCOS")
public Result uploadFileToCOS(MultipartFile file){
// 判断文件是否为空
if (file.getSize() == 0) {
return Result.error("文件为空");
}
// 把获取的文件转成流
InputStream inputStream = null;
try {
inputStream = file.getInputStream();
// 上传cos
String filePath = COSClientUtil.uploadFileToCOS(inputStream, file.getName());
return Result.ok(filePath);
} catch (Exception e) {
e.printStackTrace();
return Result.error("上传失败");
}
}
到这简单的上传就完成啦!!!