查询对象元数据

最近更新时间:2024-08-13 16:47:51

我的收藏

简介

本文介绍对象存储 COS 通过 c++ SDK 实现查询对象元数据的示例代码和描述。

注意事项

若您想查询目标对象的元数据,需要具有目标对象的读取权限:在您进行 授权策略 时,action 需要设置为cos:HeadObject,更多授权请参见 支持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/62
std::string secret_id = "AKIDXXXXXXXX"; //用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://cloud.tencent.com/document/product/598/37140
std::string secret_key = "1A2Z3YYYYYYYYYY"; //用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://cloud.tencent.com/document/product/598/37140
qcloud_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-sdk
uint64_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;
}

使用案例

查询对象元数据

查询指定对象的元数据信息(HEAD Object)。

方法原型

CosResult CosAPI::HeadObject(const HeadObjectReq& req, HeadObjectResp* resp)

请求示例

void HeadObjectDemo(qcloud_cos::CosAPI& cos) {
std::string object_name = "test.txt";
qcloud_cos::HeadObjectReq req(bucket_name, object_name);
qcloud_cos::HeadObjectResp resp;
qcloud_cos::CosResult result = cos.HeadObject(req, &resp);
std::cout << "===================HeadObjectResponse=====================" << std::endl;
std::map<std::string, std::string> cos_metas = resp.GetXCosMetas(); // 获取自定义的元数据map
std::string cos_meta = resp.GetXCosMeta("x-cos-meta-*"); // 获取指定自定义的元数据
std::string restore = resp.GetXCosRestore(); // 获得 archive 类型对象的当前恢复状态
std::string sse = resp.GetXCosServerSideEncryption(); // Server端加密使用的算法
PrintResult(result, resp);
std::cout << "==========================================================" << std::endl;
}

参数说明

参数名称
描述
类型
req
Head 请求
HeadObjectReq
resp
Head 响应
HeadObjectResp
HeadObjectReq 成员或函数说明:
成员或函数
描述
类型
bucket_name
存储桶名,可通过构造函数或 set 方法进行设置
存储桶的命名格式为 BucketName-APPID,详情请参见 命名规范
string
object_name
对象键(Key),可通过构造函数或 set 方法进行设置
是对象在存储桶中的唯一标识。例如,在对象的访问域名 examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com/doc/picture.jpg 中,对象键为 doc/picture.jpg,详情请参见 对象键
string
HeadObjectResp 成员函数说明:
成员函数
描述
返回类型
GetXCosMetas
获取自定义的元数据map
map<std::string, std::string>
GetXCosMeta
获取指定自定义的元数据
string
GetXCosRestore
获取 archive 类型对象的当前恢复状态
string
GetXCosServerSideEncryption
获取 Server 端加密使用的算法
string
GetEtag
获取存储上传对象的 Etag
string
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 接口说明,请参见 HEAD Object 文档。