存储桶操作

最近更新时间:2024-09-04 16:10:31

我的收藏

简介

本文介绍对象存储 COS 通过 Java SDK 实现查询存储桶列表、创建存储桶、检索存储桶、删除存储桶的示例代码和描述。

注意事项

在您使用存储桶相关操作之前,需要先具有相关权限,具体而言:
若想查询存储桶列表,在您进行 授权策略 时,action 需要设置为 cos:GetService ,更多授权请参见 支持CAM的业务接口
若想创建存储桶,在您进行 授权策略 时,action 需要设置为 cos:PutBucket ,更多授权请参见 支持CAM的业务接口
若想检索存储桶,在您进行 授权策略 时,action 需要设置为 cos:HeadBucket ,更多授权请参见 支持CAM的业务接口
若想删除存储桶,在您进行 授权策略 时,action 需要设置为 cos:DeleteBucket ,更多授权请参见 支持CAM的业务接口

相关示例

功能名称
描述
示例代码
查询存储桶列表
查询指定账号下所有的存储桶列表
创建存储桶
在指定账号下创建一个存储桶
检索存储桶
判断某个存储桶是否存在
删除存储桶
删除指定账号下的空存储桶

前期准备

创建 COSClient

调用 COS 的接口之前,必须先创建一个 COSClient 的实例。
注意:
COSClient 实例是并发安全的,因实例内部维持了一个连接池,创建多个实例可能导致程序资源耗尽。这里推荐一个进程只创建一个 COSClient 实例,当不会再通过这个实例发起请求的时候,再选择关闭这个实例。
// 创建 COSClient 实例,这个实例用来后续调用请求
COSClient createCOSClient() {
// 设置用户身份信息。
// SECRETID 和 SECRETKEY 请登录访问管理控制台 https://console.cloud.tencent.com/cam/capi 进行查看和管理
String secretId = System.getenv("secretId");//用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://cloud.tencent.com/document/product/598/37140
String secretKey = System.getenv("secretKey");//用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://cloud.tencent.com/document/product/598/37140
COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);

// ClientConfig 中包含了后续请求 COS 的客户端设置:
ClientConfig clientConfig = new ClientConfig();

// 设置 bucket 的地域
// COS_REGION 请参见 https://cloud.tencent.com/document/product/436/6224
clientConfig.setRegion(new Region("COS_REGION"));

// 以下的设置,是可选的:

// 设置 socket 读取超时,默认 30s
// clientConfig.setSocketTimeout(30*1000);
// 设置建立连接超时,默认 30s
// clientConfig.setConnectionTimeout(30*1000);

// 如果需要的话,设置 http 代理,ip 以及 port
// clientConfig.setHttpProxyIp("httpProxyIp");
// clientConfig.setHttpProxyPort(80);

// 生成 cos 客户端。
return new COSClient(cred, clientConfig);
}

使用临时密钥创建 COSClient

如果要使用临时密钥请求 COS,则需要用临时密钥创建 COSClient 实例。
注意:
COSClient 实例是并发安全的,这里推荐一个进程只创建一个 COSClient 实例,当不会再通过这个实例发起请求的时候,再选择关闭这个实例。
使用临时密钥创建 COSClient 实例之前,需要先生成临时密钥,本 SDK 并不能生成临时密钥,而需要使用额外的操作来生成,参考 临时密钥生成及使用指引
为避免临时密钥过期,在创建 COSClient 实例之后,可定期通过调用 COSClient 的 setCOSCredentials 函数重新设置密钥。
// 创建 COSClient 实例,这个实例用来后续调用请求
COSClient createCOSClient() {
// 这里需要已经获取到临时密钥的结果。
// 临时密钥的生成参见 https://cloud.tencent.com/document/product/436/14048#cos-sts-sdk
String tmpSecretId = "TMPSECRETID";
String tmpSecretKey = "TMPSECRETKEY";
String sessionToken = "SESSIONTOKEN";

COSCredentials cred = new BasicSessionCredentials(tmpSecretId, tmpSecretKey, sessionToken);

// ClientConfig 中包含了后续请求 COS 的客户端设置:
ClientConfig clientConfig = new ClientConfig();

// 设置 bucket 的地域
// COS_REGION 请参见 https://cloud.tencent.com/document/product/436/6224
clientConfig.setRegion(new Region("COS_REGION"));

// 以下的设置,是可选的:

// 设置 socket 读取超时,默认 30s
// clientConfig.setSocketTimeout(30*1000);
// 设置建立连接超时,默认 30s
// clientConfig.setConnectionTimeout(30*1000);

// 如果需要的话,设置 http 代理,ip 以及 port
// clientConfig.setHttpProxyIp("httpProxyIp");
// clientConfig.setHttpProxyPort(80);

// 生成 cos 客户端。
return new COSClient(cred, clientConfig);
}

关闭 COSClient

当不会再通过一个COSClient实例发起请求的时候,请及时将其关闭,防止资源泄露。
cosclient.shutdown();

使用案例

查询存储桶列表

方法原型

public List<Bucket> listBuckets() throws CosClientException, CosServiceException;

请求示例

// 调用 COS 接口之前必须保证本进程存在一个 COSClient 实例,如果没有则创建
// 详细代码参见本页:简单操作 -> 创建 COSClient
// 如果只调用 listBuckets 方法,则创建 cosClient 时指定 region 为 new Region("") 即可
COSClient cosClient = createCOSClient();

List<Bucket> buckets = cosClient.listBuckets();
for (Bucket bucketElement : buckets) {
String bucketName = bucketElement.getName();
String bucketLocation = bucketElement.getLocation();
}

// 确认本进程不再使用 cosClient 实例之后,关闭即可
cosClient.shutdown();

参数说明

返回结果说明

成功:返回一个 所有 Bucket 类的列表,Bucket 类包含了 bucket 成员,location 等信息。
失败:发生错误(如 Bucket 不存在),抛出异常 CosClientException 或者 CosServiceException。详情请参见 异常处理

创建存储桶

在指定账号下创建一个存储桶。同一用户账号下,可以创建多个存储桶,数量上限是200个(不区分地域),存储桶中的对象数量没有限制。创建存储桶是低频操作,一般建议在控制台创建 Bucket,在 SDK 进行 Object 的操作。

方法原型

public Bucket createBucket(String bucketName) throws CosClientException, CosServiceException;

请求示例

// 调用 COS 接口之前必须保证本进程存在一个 COSClient 实例,如果没有则创建
// 详细代码参见本页:简单操作 -> 创建 COSClient
COSClient cosClient = createCOSClient();

String bucket = "examplebucket-1250000000"; //存储桶名称,格式:BucketName-APPID
CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucket);
// 设置 bucket 的权限为 Private(私有读写), 其他可选有公有读私有写, 公有读写
createBucketRequest.setCannedAcl(CannedAccessControlList.Private);
Bucket bucketResult = cosClient.createBucket(createBucketRequest);
// 如果需要创建多AZ桶,请调用函数createMAZBucket
// 请注意对象存储多 AZ 特性目前仅支持北京、广州、上海、中国香港、新加坡地域
// Bucket bucketResult = cosClient.createMAZBucket(createBucketRequest);

// 确认本进程不再使用 cosClient 实例之后,关闭即可
cosClient.shutdown();

参数说明

参数名称
描述
类型
bucketName
Bucket 的命名规则为 BucketName-APPID,详情请参见 存储桶概述
String

返回结果说明

成功: Bucket 类,包含有关 Bucket 的描述(Bucket 的名称,owner 和创建日期)。
失败: 发生错误(如身份认证失败),抛出异常 CosClientException 或者 CosServiceException。详情请参见 异常处理

检索存储桶

方法原型

public boolean doesBucketExist(String bucketName)
throws CosClientException, CosServiceException;

请求示例

// 调用 COS 接口之前必须保证本进程存在一个 COSClient 实例,如果没有则创建
// 详细代码参见本页:简单操作 -> 创建 COSClient
COSClient cosClient = createCOSClient();

// bucket的命名规则为 BucketName-APPID ,此处填写的存储桶名称必须为此格式
String bucketName = "examplebucket-1250000000";
boolean bucketExistFlag = cosClient.doesBucketExist(bucketName);

// 确认本进程不再使用 cosClient 实例之后,关闭即可
cosClient.shutdown();

参数说明

参数名称
描述
类型
bucketName
Bucket 的命名规则为 BucketName-APPID,详情请参见 存储桶概述
String

返回结果说明

成功:存在返回 true,否则 false。
失败:发生错误(如身份认证失败),抛出异常 CosClientException 或者 CosServiceException。详情请参见 异常处理

删除存储桶

方法原型

public void deleteBucket(String bucketName) throws CosClientException, CosServiceException;

请求示例

// 调用 COS 接口之前必须保证本进程存在一个 COSClient 实例,如果没有则创建
// 详细代码参见本页:简单操作 -> 创建 COSClient
COSClient cosClient = createCOSClient();

// bucket的命名规则为 BucketName-APPID ,此处填写的存储桶名称必须为此格式
String bucketName = "examplebucket-1250000000";
cosClient.deleteBucket(bucketName);

// 确认本进程不再使用 cosClient 实例之后,关闭即可
cosClient.shutdown();

参数说明

参数名称
描述
类型
bucketName
Bucket 的命名规则为 BucketName-APPID,详情请参见 存储桶概述
String

返回结果说明

成功:无返回值。
失败:发生错误(如身份认证失败),抛出异常 CosClientException 或者 CosServiceException。详情请参见 异常处理

API操作

关于查询存储桶列表的API 接口说明,请参见 GET Service (List Buckets) 文档。
关于创建存储桶的API 接口说明,请参见 PUT Bucket 文档。
关于检索存储桶的API 接口说明,请参见 HEAD Bucket 文档。
关于删除存储桶的API 接口说明,请参见 DELETE Bucket 文档。