一、简介
对象存储(Cloud Object Storage,COS)是腾讯云提供的一种存储海量文件的分布式存储服务,用户可通过网络随时存储和查看数据。腾讯云 COS 使所有用户都能使用具备高扩展性、低成本、可靠和安全的数据存储服务。
COS 通过控制台、API、SDK 和工具等多样化方式简单、快速地接入,实现了海量数据存储和管理。通过 COS 可以进行多格式文件的上传、下载和管理。腾讯云提供了直观的 Web 管理界面,同时遍布全国范围的 CDN 节点可以对文件下载进行加速。
二、使用代码
1、获取永久密钥
若您使用永久密钥初始化 COSClient,可以先在访问管理控制台中的 API 密钥管理 页面获取 SecretId、SecretKey,使用永久密钥适用于大部分的应用场景;
2、添加pom.xml中的依赖
代码语言:javascript复制<dependency>
<groupId>com.qcloud</groupId>
<artifactId>cos_api</artifactId>
<version>5.6.8</version>
</dependency>
3、初始化用户身份信息
代码语言:javascript复制// 1 初始化用户身份信息(secretId, secretKey)。
String secretId = "COS_SECRETID";
String secretKey = "COS_SECRETKEY";
COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);
// 2 设置 bucket 的区域, COS 地域的简称请参照 https://cloud.tencent.com/document/product/436/6224
// clientConfig 中包含了设置 region, https(默认 http), 超时, 代理等 set 方法, 使用可参见源码或者常见问题 Java SDK 部分。
Region region = new Region("ap-guangzhou");
ClientConfig clientConfig = new ClientConfig(region);
// 3 生成 cos 客户端。
COSClient cosClient = new COSClient(cred, clientConfig);
4、创建存储桶(需要先进行3、初始化用户身份信息)
代码语言:javascript复制// 存储桶名称,格式:BucketName-APPID(后面ID每个用户唯一)(需要改1)
String bucket = "exa-1300615854";
CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucket);
// 设置 bucket 的权限为 PublicRead(公有读私有写), 其他可选有私有读写, 公有读写
createBucketRequest.setCannedAcl(CannedAccessControlList.PublicRead);
try{
Bucket bucketResult = cosClient.createBucket(createBucketRequest);
} catch (CosServiceException serverException) {
serverException.printStackTrace();
} catch (CosClientException clientException) {
clientException.printStackTrace();
}
5、创建存储桶(需要先进行3、初始化用户身份信息)
代码语言:javascript复制try {
List<Bucket> buckets = cosClient.listBuckets();
System.out.println(buckets);
} catch (CosServiceException serverException) {
serverException.printStackTrace();
} catch (CosClientException clientException) {
clientException.printStackTrace();
}
6、上传对象(需要先进行3、初始化用户身份信息)(需要改3处)
代码语言:javascript复制try {
// 指定要上传的文件(需要改1)
File localFile = new File("D:\11.pdf");
// 指定要上传到的存储桶(需要改2)
String bucketName = "start-1300615357";
// 指定要上传到 COS 上对象键(需要改3)
String key = "exampl";
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, localFile);
PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest);
} catch (CosServiceException serverException) {
serverException.printStackTrace();
} catch (CosClientException clientException) {
clientException.printStackTrace();
}
7、查询存储桶中内容(需要先进行3、初始化用户身份信息)(需要改1处)
代码语言:javascript复制try {
// 桶容器的名称(需要改1)
String bucket = "start-1300615357";
ListObjectsRequest listObjectsRequest = new ListObjectsRequest();
// 设置 bucket 名称
listObjectsRequest.setBucketName(bucket);
// prefix 表示列出的 object 的 key 以 prefix 开始
listObjectsRequest.setPrefix("");
// 设置最大遍历出多少个对象, 一次 listobject 最大支持1000
listObjectsRequest.setMaxKeys(1000);
listObjectsRequest.setDelimiter("/");
ObjectListing objectListing = cosClient.listObjects(listObjectsRequest);
for (COSObjectSummary cosObjectSummary : objectListing.getObjectSummaries()) {
// 对象的路径 key
String key = cosObjectSummary.getKey();
// 对象的 etag
String etag = cosObjectSummary.getETag();
// 对象的长度
long fileSize = cosObjectSummary.getSize();
// 对象的存储类型
String storageClass = cosObjectSummary.getStorageClass();
System.out.println("key:" key "; etag:" etag "; fileSize:" fileSize ";storageClass:" storageClass);
}
} catch (CosServiceException serverException) {
serverException.printStackTrace();
} catch (CosClientException clientException) {
clientException.printStackTrace();
}
8、下载文件(需要先进行3、初始化用户身份信息)(需要改3处)
代码语言:javascript复制try{
// 指定对象所在的存储桶(需要改1)
String bucketName = "start-1300615357";
// 指定对象在 COS 上的对象键(需要改2)
String key = "exampl";
// 指定要下载到的本地路径(需要制定文件名)(需要改3)
File downFile = new File("D:\12.pdf");
GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, key);
ObjectMetadata downObjectMeta = cosClient.getObject(getObjectRequest, downFile);
} catch (CosServiceException serverException) {
serverException.printStackTrace();
} catch (CosClientException clientException) {
clientException.printStackTrace();
}
9、删除文件(需要先进行3、初始化用户身份信息)(需要改2处)
删除 COS 上指定路径的对象;
代码语言:javascript复制try {
// 指定对象所在的存储桶(需要改1)
String bucketName = "start-1300615357";
// 指定对象在 COS 上的对象键(需要改2)
String key = "exampl";
cosClient.deleteObject(bucketName, key);
} catch (CosServiceException serverException) {
serverException.printStackTrace();
} catch (CosClientException clientException) {
clientException.printStackTrace();
}
10、关闭客户端(需要先进行3、初始化用户身份信息)
关闭 cosClient,并释放 HTTP 连接的后台管理线程。
代码语言:javascript复制// 关闭客户端(关闭后台线程)
cosClient.shutdown();
三、完整代码
下面是一个完成的代码。主要把账号信息改为自己的就可以了;
代码语言:javascript复制package com.lydms.web;
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 java.io.File;
import java.util.List;
public class TestCos {
public static void main(String[] args) {
// 1 初始化用户身份信息(secretId, secretKey)。
String secretId = "AKIDTmyudXgm59zmT6T3GI5cw3wb1T5lmYeU";
String secretKey = "mJZTKp8GApJpBTErIWZNuCLJ5cTeuvhF";
COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);
// 2 设置 bucket 的区域, COS 地域的简称请参照 https://cloud.tencent.com/document/product/436/6224
// clientConfig 中包含了设置 region, https(默认 http), 超时, 代理等 set 方法, 使用可参见源码或者常见问题 Java SDK 部分。
Region region = new Region("ap-beijing");
ClientConfig clientConfig = new ClientConfig(region);
// 3 生成 cos 客户端。
COSClient cosClient = new COSClient(cred, clientConfig);
// 查询存储桶列表
getbucket(cosClient);
// 上传文件到桶容器
upload(cosClient);
// 查询存储桶中内容
getContent(cosClient);
// 下载文件
downFile(cosClient);
// 删除文件
deleteFile(cosClient);
// 创建桶容器
creatBucket(cosClient);
// 关闭客户端(关闭后台线程)
cosClient.shutdown();
}
/**
* 创建存储桶(需要改3处)
* @return
*/
private static void creatBucket(COSClient cosClient) {
String bucket = "exa-1300415347";
CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucket);
// 设置 bucket 的权限为 PublicRead(公有读私有写), 其他可选有私有读写, 公有读写
createBucketRequest.setCannedAcl(CannedAccessControlList.PublicRead);
try {
Bucket bucketResult = cosClient.createBucket(createBucketRequest);
} catch (CosServiceException serverException) {
serverException.printStackTrace();
} catch (CosClientException clientException) {
clientException.printStackTrace();
}
}
/**
* 删除文件(需要改2处位置)
* @param cosClient
*/
private static void deleteFile(COSClient cosClient) {
try {
// 指定对象所在的存储桶(需要改1)
String bucketName = "start-1300415347";
// 指定对象在 COS 上的对象键(需要改2)
String key = "exampl";
cosClient.deleteObject(bucketName, key);
} catch (CosServiceException serverException) {
serverException.printStackTrace();
} catch (CosClientException clientException) {
clientException.printStackTrace();
}
}
/**
* 下载文件(需要改3处位置)
*
* @param cosClient
*/
private static void downFile(COSClient cosClient) {
try {
// 指定对象所在的存储桶(需要改1)
String bucketName = "start-1300415347";
// 指定对象在 COS 上的对象键(需要改2)
String key = "exampl";
// 指定要下载到的本地路径(需要制定文件名)(需要改3)
File downFile = new File("D:\12.pdf");
GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, key);
ObjectMetadata downObjectMeta = cosClient.getObject(getObjectRequest, downFile);
} catch (CosServiceException serverException) {
serverException.printStackTrace();
} catch (CosClientException clientException) {
clientException.printStackTrace();
}
}
/**
* 查询存储桶中内容(需要改1处位置)
*
* @param cosClient
*/
private static void getContent(COSClient cosClient) {
try {
// 桶容器的名称(需要改1)
String bucket = "start-1300415347";
ListObjectsRequest listObjectsRequest = new ListObjectsRequest();
// 设置 bucket 名称
listObjectsRequest.setBucketName(bucket);
// prefix 表示列出的 object 的 key 以 prefix 开始
listObjectsRequest.setPrefix("");
// 设置最大遍历出多少个对象, 一次 listobject 最大支持1000
listObjectsRequest.setMaxKeys(1000);
listObjectsRequest.setDelimiter("/");
ObjectListing objectListing = cosClient.listObjects(listObjectsRequest);
for (COSObjectSummary cosObjectSummary : objectListing.getObjectSummaries()) {
// 对象的路径 key
String key = cosObjectSummary.getKey();
// 对象的 etag
String etag = cosObjectSummary.getETag();
// 对象的长度
long fileSize = cosObjectSummary.getSize();
// 对象的存储类型
String storageClass = cosObjectSummary.getStorageClass();
System.out.println("key:" key "; etag:" etag "; fileSize:" fileSize "; storageClass:" storageClass);
}
} catch (CosServiceException serverException) {
serverException.printStackTrace();
} catch (CosClientException clientException) {
clientException.printStackTrace();
}
}
/**
* 上传文件到桶容器(需要改3处位置)
*
* @param cosClient
*/
private static void upload(COSClient cosClient) {
try {
// 指定要上传的文件(需要改1)
File localFile = new File("D:\11.pdf");
// 指定要上传到的存储桶(需要改2)
String bucketName = "start-1300415347";
// 指定要上传到 COS 上对象键(需要改3)
String key = "exampl";
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, localFile);
PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest);
} catch (CosServiceException serverException) {
serverException.printStackTrace();
} catch (CosClientException clientException) {
clientException.printStackTrace();
}
}
/**
* 查询存储桶列表(根据用户信息进行)
*
* @param cosClient
*/
private static void getbucket(COSClient cosClient) {
try {
List<Bucket> buckets = cosClient.listBuckets();
System.out.println(buckets);
} catch (CosServiceException serverException) {
serverException.printStackTrace();
} catch (CosClientException clientException) {
clientException.printStackTrace();
}
}
}