列出对象

最近更新时间:2024-08-13 11:18:21

我的收藏

简介

本文介绍对象存储 COS 通过 C SDK 实现列出对象功能的示例代码和描述。

注意事项

若您要使用列出对象功能,需要先具有目标桶的读取权限:在您进行 授权策略 时,action 需要设置为 cos:GetBucket ,更多授权请参见 支持CAM的业务接口

相关示例

功能名称
描述
示例代码
列出对象
提供了查询存储桶下的部分或者全部对象的功能。

使用案例

列出桶下对象

说明:
该 Demo 演示了如何使用 COS C SDK 列出桶下的对象。
可以指定列出对象名的前缀等请求参数信息,具体可以看下方请求体中的设置方法。

方法原型

cos_status_t *cos_list_object(const cos_request_options_t *options,
const cos_string_t *bucket,
cos_list_object_params_t *params,
cos_table_t **resp_headers);

请求示例

// COS 的 bucket 名称, [bucket]-[appid], 如: mybucket-1253666666,可在 https://console.cloud.tencent.com/cos5/bucket 查看
char bucket_name[] = "examplebucket-12500000000";
// 开发者访问 COS 服务时拥有的用户维度唯一资源标识,用以标识资源,可在 https://console.cloud.tencent.com/cam/capi 页面获取
char appid[] = "12500000000";
// 开发者拥有的项目身份ID/密钥,可在 https://console.cloud.tencent.com/cam/capi 页面获取
char secret_id[] = "AKIDXXXXXXXX";
char secret_key[] = "1A2Z3YYYYYYYYYY";
//endpoint 是 COS 访问域名信息(不设置存储桶前缀,访问 COS 时会自动在前面拼接上[bucket]-[appid]), 详情请参见 https://cloud.tencent.com/document/product/436/6224 文档
char endpoint[] = "cos.ap-guangzhou.myqcloud.com";
// 是否使用自定域名。如果设置为 COS_TRUE ,则访问 COS 时需要将 endpoint 的值修改为自定义域名
int is_cname = COS_FALSE;
void init_test_config(cos_config_t* config, int is_cname) {
cos_str_set(&config->endpoint, endpoint);
cos_str_set(&config->access_key_id, secret_id);
cos_str_set(&config->access_key_secret, secret_key);
cos_str_set(&config->appid, appid);
// cos_str_set(&config->sts_token, token); // 使用临时密钥时的 token
config->is_cname = is_cname; // 是否使用自定义域名
}

void init_test_request_options(cos_request_options_t* options, int is_cname) {
options->config = cos_config_create(options->pool);
init_test_config(options->config, is_cname);
options->ctl = cos_http_controller_create(options->pool, 0);
}

void log_status(cos_status_t* s) {
cos_warn_log("status->code: %d", s->code);
if (s->error_code)
cos_warn_log("status->error_code: %s", s->error_code);
if (s->error_msg)
cos_warn_log("status->error_msg: %s", s->error_msg);
if (s->req_id)
cos_warn_log("status->req_id: %s", s->req_id);
}

void list_all_objects_demo() {
cos_pool_t* p = NULL;
cos_status_t* s = NULL;
cos_request_options_t* options = NULL;
cos_string_t bucket;
cos_table_t* resp_headers;
int is_truncated = 1;
cos_string_t marker;
cos_pool_create(&p, NULL);
options = cos_request_options_create(p);
init_test_request_options(options, is_cname);
cos_str_set(&bucket, bucket_name);
// list object (get bucket)
cos_list_object_params_t* list_params = NULL;
list_params = cos_create_list_object_params(p);
// 设置最大遍历出多少个对象, 一次listobject最大支持1000
list_params->max_ret = 1000;
cos_str_set(&marker, "");
while (is_truncated) {
list_params->marker = marker;
cos_list_init(&list_params->object_list);
s = cos_list_object(options, &bucket, list_params, &resp_headers);
if (!cos_status_is_ok(s)) {
printf("list object failed, req_id:%s\\n", s->req_id);
break;
}
// list_params->object_list 返回列出的object对象。
cos_list_object_content_t* content = NULL;
cos_list_for_each_entry(cos_list_object_content_t, content, &list_params->object_list, node) {
printf("object: %s\\n", content->key.data);
}
is_truncated = list_params->truncated;
marker = list_params->next_marker;
}
cos_pool_destroy(p);
}
int main() {
if (cos_http_io_initialize(NULL, 0) != COSE_OK) {
exit(1);
}
list_all_objects_demo();
// cos_http_io_deinitialize last
cos_http_io_deinitialize();
return 0;
}

参数说明

参数名称
参数描述
类型
options
COS 请求选项
Struct
bucket
存储桶名称,Bucket 的命名规则为 BucketName-APPID ,此处填写的存储桶名称必须为此格式
String
params
列表操作参数信息
Struct
params.encoding_type
规定返回值的编码方式
String
params.prefix
前缀匹配,用来规定返回的文件前缀地址
String
params.marker
默认以 UTF-8 二进制顺序列出条目,所有列出条目从 marker 开始
String
params.delimiter
查询分隔符,用于对对象键进行分组
String
params.max_ret
单次返回最大的条目数量,默认1000
Struct
params.truncated
返回条目是否被截断,0 或者 1
Boolean
params.next_marker
假如返回条目被截断,则返回 NextMarker 就是下一个条目的起点
String
params.object_list
Get Bucket 操作返回的对象信息列表
Struct
params.object_list.key
Get Bucket 操作返回的 Object 名称
Struct
params.object_list.last_modified
Get Bucket 操作返回的 Object 最后修改时间
Struct
params.object_list.etag
Get Bucket 操作返回的对象的 SHA-1 算法校验值
Struct
params.object_list.size
Get Bucket 操作返回的对象大小,单位 Byte
Struct
params.object_list.owner_id
Get Bucket 操作返回的对象拥有者 UID 信息
Struct
params.object_list.storage_class
Get Bucket 操作返回的对象存储级别
Struct
params.common_prefix_list
将 Prefix 到 delimiter 之间的相同路径归为一类,定义为 Common Prefix
Struct
resp_headers
返回 HTTP 响应消息的头域
Struct

返回结果说明

返回结果
描述
类型
code
错误码
Int
error_code
错误码内容
String
error_msg
错误码描述
String
req_id
请求消息 ID
String

API 操作

关于列出对象的 API 接口说明,请参见 List Objects 文档。