简介
本文介绍对象存储 COS 通过 C++ SDK 实现删除对象功能的示例代码和描述。
注意事项
若您使用删除单个对象接口,需要具有目标对象的删除权限:在您进行 授权策略 时,action 需要设置为
cos:DeleteObject
,更多授权请参见 支持CAM的业务接口。若您在匿名访问场景下使用删除多个对象接口,需要具有所有目标对象的删除权限和批删权限:在您进行 授权策略 时,action 需要设置为
cos:DeleteObject
和cos:DeleteMultipleObjects
,更多授权请参见 支持CAM的业务接口。若您在非匿名访问场景下使用删除多个对象接口,需要具有所有目标对象的删除权限:在您进行 授权策略 时,action 需要设置为
cos:DeleteObject
,更多授权请参见 支持CAM的业务接口。相关示例
功能名称 | 描述 | 示例代码 |
删除对象 | 提供了删除单个对象和删除多个对象功能 |
前期准备
创建 CosAPI
调用 COS 的接口之前,必须先创建一个 CosAPI 的实例。这个实例用来后续调用请求。
qcloud_cos::CosAPI InitCosAPI() {uint64_t appid = 12500000000;std::string region = "ap-guangzhou";// bucket 的地域,请参见 https://cloud.tencent.com/document/product/436/62std::string secret_id = "AKIDXXXXXXXX"; //用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://cloud.tencent.com/document/product/598/37140std::string secret_key = "1A2Z3YYYYYYYYYY"; //用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://cloud.tencent.com/document/product/598/37140qcloud_cos::CosConfig config(appid, secret_id, secret_key, region);qcloud_cos::CosAPI cos_tmp(config);return cos_tmp;}
使用临时密钥创建 CosAPI
如果要使用临时密钥请求 COS,则需要用临时密钥创建 CosAPI 实例。
qcloud_cos::CosAPI InitCosAPI() {// 需要已经获取到临时密钥的结果:tmp_secret_id、tmp_secret_key、// 临时密钥的生成参见 https://cloud.tencent.com/document/product/436/14048#cos-sts-sdkuint64_t appid = 12500000000;std::string region = "ap-guangzhou";std::string tmp_secret_id = "AKIDXXXXXXXX";std::string tmp_secret_key = "1A2Z3YYYYYYYYYY";std::string tmp_token = "token";qcloud_cos::CosConfig config(appid, tmp_secret_id, tmp_secret_key, region);config.SetTmpToken(tmp_token);qcloud_cos::CosAPI cos_tmp(config);return cos_tmp;}
使用案例
删除单个对象
说明:
该 Demo 演示了如何使用 COS C++ SDK 删除单个对象。
方法原型
CosResult CosAPI::DeleteObject(const DeleteObjectReq& req, DeleteObjectResp* resp)
请求示例
void DeleteObjectDemo(qcloud_cos::CosAPI& cos) {std::string object_name = "test.txt";qcloud_cos::DeleteObjectReq req(bucket_name, object_name);// req.SetXCosVersionId("xxxxx");// 可以指定删除的版本qcloud_cos::DeleteObjectResp resp;qcloud_cos::CosResult result = cos.DeleteObject(req, &resp);std::cout << "===================DeleteObjectResponse=====================" << std::endl;PrintResult(result, resp);std::cout << "============================================================" << std::endl;}
参数说明
参数名称 | 描述 | 类型 |
req | 删除文件请求 | DeleteObjectReq |
resp | 删除文件响应 | DeleteObjectResp |
DeleteObjectReq 成员或函数说明:
成员或函数 | 描述 | 参数类型 |
bucket_name | 存储桶名,可通过构造函数或 set 方法进行设置 | string |
object_name | 对象键(Key),可通过构造函数或 set 方法进行设置 是对象在存储桶中的唯一标识。例如,在对象的访问域名 examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com/doc/picture.jpg 中,对象键为 doc/picture.jpg,详情请参见 对象键 | string |
SetXCosVersionId | 设置要删除对象的版本号,可选设置,仅当开启存储桶版本控制可用 | string |
DeleteObjectResp 成员函数说明:
成员函数 | 描述 | 返回类型 |
GetXCosRequestId | 获取请求 ID | string |
返回说明
CosResult 主要成员函数说明如下:
成员函数 | 描述 | 返回类型 |
IsSucc | 判断是否成功,成功返回 true,失败返回 false。 | bool |
GetHttpStatus | 获得 http 状态码。 | int |
GetErrorCode | 请求失败时获取错误码。 | string |
GetErrorMsg | 请求失败时获取错误信息。 | string |
GetXCosRequestId | 获取请求 ID。 | string |
对 CosResult 的使用样例如下,用户可根据信息选择使用:
void PrintResult(const qcloud_cos::CosResult& result, const qcloud_cos::BaseResp& resp) {if (result.IsSucc()) {std::cout << "Request Succ." << std::endl;std::cout << resp.DebugString() << std::endl;} else {std::cout << "ErrorMsg=" << result.GetErrorMsg() << std::endl;std::cout << "HttpStatus=" << result.GetHttpStatus() << std::endl;std::cout << "ErrorCode=" << result.GetErrorCode() << std::endl;std::cout << "ErrorMsg=" << result.GetErrorMsg() << std::endl;std::cout << "ResourceAddr=" << result.GetResourceAddr() << std::endl;std::cout << "XCosRequestId=" << result.GetXCosRequestId() << std::endl;std::cout << "XCosTraceId=" << result.GetXCosTraceId() << std::endl;}}
批量删除对象
说明:
该 Demo 演示了如何使用 COS C++ SDK 批量删除对象。
该方法是否成功,需要判断 resp.GetErrorMsgs() 是否为空。
方法原型
CosResult CosAPI::DeleteObjects(const DeleteObjectsReq& req, DeleteObjectsResp* resp)
请求示例
void DeleteObjectsDemo(qcloud_cos::CosAPI& cos) {std::vector<ObjectVersionPair> to_be_deleted;{ObjectVersionPair pair;std::string object_name = "test_dir/audio.mp3";std::string version_id = ""; // 有需要可以指定删除的版本,如果为空则不指定to_be_deleted.push_back(ObjectVersionPair(object_name, version_id));}{std::string object_name = "test_dir/video.mp4";std::string version_id = ""; // 有需要可以指定删除的版本,如果为空则不指定to_be_deleted.push_back(ObjectVersionPair(object_name, version_id));}qcloud_cos::DeleteObjectsReq req(bucket_name, to_be_deleted);// req.SetQuiet(); // 设置为 Quiet模式, 则不返回删除成功的对象信息,默认为 Verbose 模式qcloud_cos::DeleteObjectsResp resp;qcloud_cos::CosResult result = cos.DeleteObjects(req, &resp);std::cout << "===================DeleteObjectsResponse=====================" << std::endl;std::vector<DeletedInfo> deleted_infos = resp.GetDeletedInfos(); // 单个删除成功的对象条目,仅当使用 Verbose 模式才会返回该元素std::vector<ErrorInfo> error_infos = resp.GetErrorMsgs(); // 单个删除失败的对象条目if (!error_infos.empty()) {std::cout << "==================Failed part message==================" << std::endl;for (ErrorInfo& error_info : error_infos) {std::cout << "key: " << error_info.m_key << "\\ncode: " << error_info.m_code << "\\nmessage: " << error_info.m_message << std::endl;std::cout << "====================================" << std::endl;}} else {std::cout << "DeleteObjects All Succ." << std::endl;}std::cout << "=============================================================" << std::endl;}
参数说明
参数名称 | 描述 | 类型 |
req | 批量删除请求 | DeleteObjectsReq |
resp | 批量删除响应 | DeleteObjectsResp |
DeleteObjectsReq 成员或函数说明:
成员或函数 | 描述 | 参数类型 |
bucket_name | 存储桶名,可通过构造函数或 set 方法进行设置 | string |
m_objvers | 要删除的对象列表,具体用法可参考示例。如需删除对象指定版本,则设置 ObjectVersionPair 中的 version_id 非空 | vector<ObjectVersionPair> |
SetQuiet | 指明删除的返回结果方式为quiet,即只返回失败的错误信息,不调用则返回成功和失败的所有信息 | 无 |
DeleteObjectsResp 成员函数说明:
成员函数 | 描述 | 返回类型 |
GetDeletedInfos | 获取单个删除成功的对象条目,仅当使用 Verbose 模式(即不设置SetQuiet)才会返回该元素 | vector<DeletedInfo> |
GetErrorMsgs | 获取单个删除失败的对象条目,具体用法可参考示例 | vector<ErrorInfo> |
GetXCosRequestId | 获取请求 ID | string |
返回说明
CosResult 主要成员函数说明如下:
成员函数 | 描述 | 返回类型 |
IsSucc | 判断是否成功,成功返回 true,失败返回 false。 | bool |
GetHttpStatus | 获得 http 状态码。 | int |
GetErrorCode | 请求失败时获取错误码。 | string |
GetErrorMsg | 请求失败时获取错误信息。 | string |
GetXCosRequestId | 获取请求 ID。 | string |
对 CosResult 的使用样例如下,用户可根据信息选择使用:
void PrintResult(const qcloud_cos::CosResult& result, const qcloud_cos::BaseResp& resp) {if (result.IsSucc()) {std::cout << "Request Succ." << std::endl;std::cout << resp.DebugString() << std::endl;} else {std::cout << "ErrorMsg=" << result.GetErrorMsg() << std::endl;std::cout << "HttpStatus=" << result.GetHttpStatus() << std::endl;std::cout << "ErrorCode=" << result.GetErrorCode() << std::endl;std::cout << "ErrorMsg=" << result.GetErrorMsg() << std::endl;std::cout << "ResourceAddr=" << result.GetResourceAddr() << std::endl;std::cout << "XCosRequestId=" << result.GetXCosRequestId() << std::endl;std::cout << "XCosTraceId=" << result.GetXCosTraceId() << std::endl;}}
API 操作
关于删除单个对象的 API 接口说明,请参见 DELETE Object 文档。
关于删除多个对象的 API 接口说明,请参见 DELETE Multiple Objects 文档。