准备工作
腾讯云开通云存储服务
创建存储桶
在秘钥管理中获取秘钥
项目配置
pom.xml导入依赖(注意可能由于版本原因在运行过程报错)
<dependency>
<groupId>com.qcloud</groupId>
<artifactId>cos_api</artifactId>
<version>5.6.8</version>
</dependency>
创建文件操作类
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.exception.CosClientException;
import com.qcloud.cos.exception.CosServiceException;
import com.qcloud.cos.model.*;
import com.qcloud.cos.region.Region;
import com.qcloud.cos.transfer.Transfer;
import com.qcloud.cos.transfer.TransferManager;
import com.qcloud.cos.transfer.TransferProgress;
import com.qcloud.cos.transfer.Upload;
import java.io.File;
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* 腾讯云对象存储
*
*/
public class TencentCOS {
// 此处填写的存储桶名称
private static final String bucketName = "xxxx";//创建存储桶时的名称
// secretId
private static final String secretId = "xxxx";
// secretKey
private static final String secretKey = "xxxx";//在上面秘钥管理中获取到
// 1 初始化用户身份信息(secretId, secretKey,可在腾讯云后台中的API密钥管理中查看!
private static COSCredentials cred = new BasicCOSCredentials(secretId,secretKey);
// 2 设置bucket的区域, COS地域的简称请参照
// https://cloud.tencent.com/document/product/436/6224,根据自己创建的存储桶选择地区
private static ClientConfig clientConfig = new ClientConfig(new Region("ap-shanghai"));
/**
* 简单文件上传, 最大支持 5 GB, 适用于小文件上传, 建议 20 M 以下的文件使用该接口 大文件上传请参照 API 文档高级 API 上传
*
* @param localFile
*/
public static String uploadfile(File localFile) throws CosClientException, CosServiceException {//通过参数传递需要上传的文件,在controller层调用即可
// 生成cos客户端
COSClient cosclient = new COSClient(cred, clientConfig);
String fileName = localFile.getName();
try {
String substring = fileName.substring(fileName.lastIndexOf("."));
Random random = new Random();
// 指定要上传到 COS 上的路径,此处看下文
fileName = "/yuntu/"+random.nextInt(10000) + System.currentTimeMillis() + substring;
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, fileName , localFile);
PutObjectResult putObjectResult = cosclient.putObject(putObjectRequest);
} catch (Exception e) {
e.printStackTrace();
} finally {
// 关闭客户端(关闭后台线程)
cosclient.shutdown();
}
return fileName;
}
//在存储桶里获取流文件,展示与页面中
public static COSObjectInputStream showFile(String key){
// 生成cos客户端
COSClient cosClient = new COSClient(cred, clientConfig);
GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, key);
COSObject cosObject = cosClient.getObject(getObjectRequest);
COSObjectInputStream cosObjectInput = cosObject.getObjectContent();
return cosObjectInput;
}
/**
*
* @Title: downFile
* @Description: 下载文件
* @return
*/
public static void downFile() {
// 生成cos客户端
COSClient cosclient = new COSClient(cred, clientConfig);
//要下载的文件路径和名称
String key = "down/demo1.jpg";
// 指定文件的存储路径
File downFile = new File("src/test/resources/mydown.txt");
// 指定要下载的文件所在的 bucket 和对象键
GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, key);
ObjectMetadata downObjectMeta = cosclient.getObject(getObjectRequest, downFile);
}
/**
* 删除文件
*
* @param key
*/
public static void deletefile(String key) throws CosClientException, CosServiceException {
// 生成cos客户端
COSClient cosclient = new COSClient(cred, clientConfig);
// 指定要删除的 bucket 和路径
cosclient.deleteObject(bucketName, key);
// 关闭客户端(关闭后台线程)
cosclient.shutdown();
}
}
至于其中的上传,展示,下载以及删除函数的编写要根据自己的项目实际情况而定,参照链接腾讯云对象存储快速入门 如作者用到的COSObjectInputStream showFile(String key)函数,其含义是传递参数为图片在存储桶中的路径,然后获得存储桶中的对象后返回一个输入流,然后就可以展示在页面中了。(如果小伙伴们在对输入流的操作不熟悉的话,可参照作者制作的一个云相册《云图》,链接见最下文)
如图,作者在自己的存储桶中创建了一个名为yuntu的文件夹,将项目中的图片上传到此文件夹中。
具体的Controller层需要根据自己项目而定,作者在此不再赘述。