接口文档

最近更新时间: 2025-02-18 16:02:00

存储桶操作

简介

本文档提供关于存储桶的基本操作和访问控制列表(ACL)的相关 API 概览以及 SDK 示例代码。

基本操作

API操作名操作描述
PUT Bucket创建存储桶在指定账号下创建一个存储桶
DELETE Bucket删除存储桶删除指定账号下的空存储桶

访问控制列表

API操作名操作描述
PUT Bucket acl设置存储桶 ACL设置指定存储桶访问权限控制列表
GET Bucket acl查询存储桶 ACL查询存储桶的访问控制列表

基本操作

创建存储桶

功能说明

在指定账号下创建一个存储桶。

方法原型

cos_status_t *cos_create_bucket(const cos_request_options_t *options, 
                                const cos_string_t *bucket, 
                                cos_acl_e cos_acl, 
                                cos_table_t **resp_headers);

参数说明

参数名称参数描述类型
optionsCOS 请求选项Struct
bucket存储桶名称,存储桶的命名格式为 BucketName-APPID,此处填写的存储桶名称必须为此格式String
cos_acl允许用户自定义权限。
有效值:COS_ACL_PRIVATE(0),COS_ACL_PUBLIC_READ(1),COS_ACL_PUBLIC_READ_WRITE(2)
默认值:COS_ACL_PRIVATE(0)
Enum
resp_headers返回 HTTP 响应消息的头域Struct

返回结果说明

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

示例

cos_pool_t *p = NULL;
int is_cname = 0;
cos_status_t *s = NULL;
cos_request_options_t *options = NULL;
cos_acl_e cos_acl = COS_ACL_PRIVATE;
cos_string_t bucket;
cos_table_t *resp_headers = NULL;

//创建内存池
cos_pool_create(&p, NULL);

//初始化请求选项
options = cos_request_options_create(p);
options->config = cos_config_create(options->pool);
init_test_config(options->config, is_cname);
cos_str_set(&options->config->endpoint, TEST_COS_ENDPOINT);
cos_str_set(&options->config->access_key_id, TEST_ACCESS_KEY_ID);
cos_str_set(&options->config->access_key_secret, TEST_ACCESS_KEY_SECRET);
cos_str_set(&options->config->appid, TEST_APPID);
options->config->is_cname = is_cname;
options->ctl = cos_http_controller_create(options->pool, 0);
cos_str_set(&bucket, TEST_BUCKET_NAME);

//创建存储桶
s = cos_create_bucket(options, &bucket, cos_acl, &resp_headers);
if (cos_status_is_ok(s)) {
        printf("create bucket succeeded\n");
} else {
        printf("create bucket failed\n");
}

//销毁内存池
cos_pool_destroy(p); 

删除存储桶

功能说明

删除指定账号下的空存储桶。

方法原型

cos_status_t *cos_delete_bucket(const cos_request_options_t *options,
                                const cos_string_t *bucket, 
                                cos_table_t **resp_headers);

参数说明

参数名称参数描述类型
optionsCOS 请求选项Struct
bucket存储桶名称,存储桶的命名格式为 BucketName-APPID,此处填写的存储桶名称必须为此格式String
resp_headers返回 HTTP 响应消息的头域Struct

返回结果说明

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

示例

cos_pool_t *p = NULL;
int is_cname = 0;
cos_status_t *s = NULL;
cos_request_options_t *options = NULL;
cos_string_t bucket;
cos_table_t *resp_headers = NULL;

//创建内存池
cos_pool_create(&p, NULL);

//初始化请求选项
options = cos_request_options_create(p);
options->config = cos_config_create(options->pool);
init_test_config(options->config, is_cname);
cos_str_set(&options->config->endpoint, TEST_COS_ENDPOINT);
cos_str_set(&options->config->access_key_id, TEST_ACCESS_KEY_ID);
cos_str_set(&options->config->access_key_secret, TEST_ACCESS_KEY_SECRET);
cos_str_set(&options->config->appid, TEST_APPID);
options->config->is_cname = is_cname;
options->ctl = cos_http_controller_create(options->pool, 0);
cos_str_set(&bucket, TEST_BUCKET_NAME);

//删除存储桶
s = cos_delete_bucket(options, &bucket, &resp_headers);
if (cos_status_is_ok(s)) {
        printf("create bucket succeeded\n");
} else {
        printf("create bucket failed\n");
}

//销毁内存池
cos_pool_destroy(p); 

设置存储桶 ACL

功能说明

设置指定存储桶访问权限控制列表。

方法原型

cos_status_t *cos_put_bucket_acl(const cos_request_options_t *options, 
                                 const cos_string_t *bucket, 
                                 cos_acl_e cos_acl,
                                 const cos_string_t *grant_read,
                                 const cos_string_t *grant_write,
                                 const cos_string_t *grant_full_ctrl,
                                 cos_table_t **resp_headers);

参数说明

参数名称参数描述类型
optionsCOS 请求选项Struct
bucket存储桶名称,存储桶的命名格式为 BucketName-APPID,此处填写的存储桶名称必须为此格式String
cos_acl允许用户自定义权限。
有效值:COS_ACL_PRIVATE(0),COS_ACL_PUBLIC_READ(1),COS_ACL_PUBLIC_READ_WRITE(2)
默认值:COS_ACL_PRIVATE(0)
Enum
grant_read读权限授予者String
grant_write写权限授予者String
grant_full_ctrl读写权限授予者String
resp_headers返回 HTTP 响应消息的头域Struct

返回结果说明

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

示例

cos_pool_t *p = NULL;
int is_cname = 0;
cos_status_t *s = NULL;
cos_request_options_t *options = NULL;
cos_string_t bucket;
cos_table_t *resp_headers = NULL;

//创建内存池
cos_pool_create(&p, NULL);

//初始化请求选项
options = cos_request_options_create(p);
options->config = cos_config_create(options->pool);
init_test_config(options->config, is_cname);
cos_str_set(&options->config->endpoint, TEST_COS_ENDPOINT);
cos_str_set(&options->config->access_key_id, TEST_ACCESS_KEY_ID);
cos_str_set(&options->config->access_key_secret, TEST_ACCESS_KEY_SECRET);
cos_str_set(&options->config->appid, TEST_APPID);
options->config->is_cname = is_cname;
options->ctl = cos_http_controller_create(options->pool, 0);
cos_str_set(&bucket, TEST_BUCKET_NAME);

//设置存储桶 ACL
cos_string_t read;
cos_str_set(&read, "id=\"qcs::cam::uin/100000000001:uin/100000000001\", id=\"qcs::cam::uin/100000000011:uin/100000000011\"");
s = cos_put_bucket_acl(options, &bucket, cos_acl, &read, NULL, NULL, &resp_headers);
if (cos_status_is_ok(s)) {
        printf("put bucket acl succeeded\n");
} else {
        printf("put bucket acl failed\n");
}

//销毁内存池
cos_pool_destroy(p); 

查询存储桶 ACL

功能说明

查询存储桶的访问控制列表。

方法原型

cos_status_t *cos_get_bucket_acl(const cos_request_options_t *options, 
                                 const cos_string_t *bucket, 
                                 cos_acl_params_t *acl_param, 
                                 cos_table_t **resp_headers)

参数说明

参数名称参数描述类型
optionsCOS 请求选项Struct
bucket存储桶名称,存储桶的命名格式为 BucketName-APPID,此处填写的存储桶名称必须为此格式String
acl_param请求操作参数Struct
owner_id请求操作返回的存储桶持有者 IDString
owner_name请求操作返回的存储桶持有者的名称String
object_list请求操作返回的被授权者信息与权限信息Struct
type请求操作返回的被授权者账户类型String
id请求操作返回的被授权者用户 IDString
name请求操作返回的被授权者用户名称String
permission请求操作返回的被授权者权限信息String
resp_headers返回 HTTP 响应消息的头域Struct

返回结果说明

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

示例

cos_pool_t *p = NULL;
int is_cname = 0;
cos_status_t *s = NULL;
cos_request_options_t *options = NULL;
cos_string_t bucket;
cos_table_t *resp_headers = NULL;

//创建内存池
cos_pool_create(&p, NULL);

//初始化请求选项
options = cos_request_options_create(p);
options->config = cos_config_create(options->pool);
init_test_config(options->config, is_cname);
cos_str_set(&options->config->endpoint, TEST_COS_ENDPOINT);
cos_str_set(&options->config->access_key_id, TEST_ACCESS_KEY_ID);
cos_str_set(&options->config->access_key_secret, TEST_ACCESS_KEY_SECRET);
cos_str_set(&options->config->appid, TEST_APPID);
options->config->is_cname = is_cname;
options->ctl = cos_http_controller_create(options->pool, 0);
cos_str_set(&bucket, TEST_BUCKET_NAME);

//获取存储桶 ACL
cos_acl_params_t *acl_params = NULL;
acl_params = cos_create_acl_params(p);
s = cos_get_bucket_acl(options, &bucket, acl_params, &resp_headers);
if (cos_status_is_ok(s)) {
        printf("get bucket acl succeeded\n");
        printf("acl owner id:%s, name:%s\n", acl_params->owner_id.data, acl_params->owner_name.data);
        cos_acl_grantee_content_t *acl_content = NULL;
        cos_list_for_each_entry(cos_acl_grantee_content_t, acl_content, &acl_params->grantee_list, node) {
                printf("acl grantee type:%s, id:%s, name:%s, permission:%s\n", acl_content->type.data, acl_content->id.data, acl_content->name.data, acl_content->permission.data);
        }
} else {
        printf("get bucket acl failed\n");
}

//销毁内存池
cos_pool_destroy(p); 

对象操作

简介

本文档提供关于对象的简单操作、分块操作等其他操作相关的 API 概览以及 SDK 示例代码。

简单操作

API操作名操作描述
GET Bucket(List Object)查询对象列表查询存储桶下的部分或者全部对象
PUT Object简单上传对象上传一个对象至存储桶
HEAD Object查询对象元数据查询对象的元数据信息
GET Object下载对象下载一个对象至本地
PUT Object - Copy设置对象复制复制文件到目标路径
DELETE Object删除单个对象在存储桶中删除指定对象
DELETE Multiple Objects删除多个对象在存储桶中批量删除对象

分块操作

API操作名操作描述
List Multipart Uploads查询分块上传查询正在进行中的分块上传信息
Initiate Multipart Upload初始化分块上传初始化分块上传任务
Upload Part上传分块分块上传文件
Upload Part - Copy复制分块将其他对象复制为一个分块
List Parts查询已上传块查询特定分块上传操作中的已上传的块
Complete Multipart Upload完成分块上传完成整个文件的分块上传
Abort Multipart Upload终止分块上传终止一个分块上传操作并删除已上传的块

其他操作

API操作名操作描述
PUT Object acl设置对象 ACL设置存储桶中某个对象的访问控制列表
GET Object acl查询对象 ACL查询对象的访问控制列表

简单操作

查询对象列表

功能说明

查询存储桶下的部分或者全部对象。

方法原型

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);

参数说明

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

返回结果说明

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

示例

cos_pool_t *p = NULL;
int is_cname = 0;
cos_status_t *s = NULL;
cos_request_options_t *options = NULL;
cos_string_t bucket;
cos_table_t *resp_headers = NULL;

//创建内存池
cos_pool_create(&p, NULL);

//初始化请求选项
options = cos_request_options_create(p);
options->config = cos_config_create(options->pool);
init_test_config(options->config, is_cname);
cos_str_set(&options->config->endpoint, TEST_COS_ENDPOINT);
cos_str_set(&options->config->access_key_id, TEST_ACCESS_KEY_ID);
cos_str_set(&options->config->access_key_secret, TEST_ACCESS_KEY_SECRET);
cos_str_set(&options->config->appid, TEST_APPID);
options->config->is_cname = is_cname;
options->ctl = cos_http_controller_create(options->pool, 0);
cos_str_set(&bucket, TEST_BUCKET_NAME);

//获取对象列表
cos_list_object_params_t *list_params = NULL;
cos_list_object_content_t *content = NULL;
list_params = cos_create_list_object_params(p);
s = cos_list_object(options, &bucket, list_params, &resp_headers);
if (cos_status_is_ok(s)) {
    printf("list object succeeded\n");
    cos_list_for_each_entry(cos_list_object_content_t, content, &list_params->object_list, node) {
        key = printf("%.*s\n", content->key.len, content->key.data);
    }
} else {
    printf("list object failed\n");
}

//销毁内存池
cos_pool_destroy(p); 

简单上传对象

功能说明

上传一个对象至存储桶。

方法原型

cos_status_t *cos_put_object_from_file(const cos_request_options_t *options,
                                       const cos_string_t *bucket, 
                                       const cos_string_t *object, 
                                       const cos_string_t *filename,
                                       cos_table_t *headers, 
                                       cos_table_t **resp_headers);

参数说明

参数名称参数描述类型
optionsCOS 请求选项Struct
bucket存储桶名称,存储桶的命名格式为 BucketName-APPID,此处填写的存储桶名称必须为此格式String
objectObject 名称String
filenameObject 本地保存文件名称String
headersCOS 请求附加头域Struct
resp_headers返回 HTTP 响应消息的头域Struct

返回结果说明

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

示例

cos_pool_t *p = NULL;
int is_cname = 0;
cos_status_t *s = NULL;
cos_request_options_t *options = NULL;
cos_string_t bucket;
cos_string_t object;
cos_string_t file;
cos_table_t *resp_headers = NULL;

//创建内存池
cos_pool_create(&p, NULL);

//初始化请求选项
options = cos_request_options_create(p);
options->config = cos_config_create(options->pool);
init_test_config(options->config, is_cname);
cos_str_set(&options->config->endpoint, TEST_COS_ENDPOINT);
cos_str_set(&options->config->access_key_id, TEST_ACCESS_KEY_ID);
cos_str_set(&options->config->access_key_secret, TEST_ACCESS_KEY_SECRET);
cos_str_set(&options->config->appid, TEST_APPID);
options->config->is_cname = is_cname;
options->ctl = cos_http_controller_create(options->pool, 0);
cos_str_set(&bucket, TEST_BUCKET_NAME);

//上传对象
cos_str_set(&file, TEST_DOWNLOAD_NAME);
cos_str_set(&object, TEST_OBJECT_NAME);
s = cos_put_object_from_file(options, &bucket, &object, &file, NULL, &resp_headers);
if (cos_status_is_ok(s)) {
    printf("put object succeeded\n");
} else {
    printf("put object failed\n");
}

//销毁内存池
cos_pool_destroy(p); 

查询对象元数据

功能说明

查询对象的元数据信息。

方法原型

cos_status_t *cos_head_object(const cos_request_options_t *options, 
                              const cos_string_t *bucket, 
                              const cos_string_t *object,
                              cos_table_t *headers, 
                              cos_table_t **resp_headers);

参数说明

参数名称参数描述类型
optionsCOS 请求选项Struct
bucket存储桶名称,存储桶的命名格式为 BucketName-APPID,此处填写的存储桶名称必须为此格式String
objectObject 名称String
headersCOS 请求附加头域Struct
resp_headers返回 HTTP 响应消息的头域Struct

返回结果说明

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

示例

cos_pool_t *p = NULL;
int is_cname = 0;
cos_status_t *s = NULL;
cos_request_options_t *options = NULL;
cos_string_t bucket;
cos_string_t object;
cos_table_t *resp_headers = NULL;

//创建内存池
cos_pool_create(&p, NULL);

//初始化请求选项
options = cos_request_options_create(p);
options->config = cos_config_create(options->pool);
init_test_config(options->config, is_cname);
cos_str_set(&options->config->endpoint, TEST_COS_ENDPOINT);
cos_str_set(&options->config->access_key_id, TEST_ACCESS_KEY_ID);
cos_str_set(&options->config->access_key_secret, TEST_ACCESS_KEY_SECRET);
cos_str_set(&options->config->appid, TEST_APPID);
options->config->is_cname = is_cname;
options->ctl = cos_http_controller_create(options->pool, 0);
cos_str_set(&bucket, TEST_BUCKET_NAME);

//获取对象元数据
cos_str_set(&object, TEST_OBJECT_NAME);
s = cos_head_object(options, &bucket, &object, NULL, &resp_headers);
if (cos_status_is_ok(s)) {
    printf("head object succeeded\n");
} else {
    printf("head object failed\n");
}

//销毁内存池
cos_pool_destroy(p); 

下载对象

功能说明

下载一个对象至本地。该操作需要对目标对象具有读权限或该目标对象已对所有人都开放了读权限(公有读)。

方法原型

cos_status_t *cos_get_object_to_file(const cos_request_options_t *options,
                                     const cos_string_t *bucket, 
                                     const cos_string_t *object,
                                     cos_table_t *headers, 
                                     cos_table_t *params,
                                     cos_string_t *filename, 
                                     cos_table_t **resp_headers);

参数说明

参数名称参数描述类型
optionsCOS 请求选项Struct
bucket存储桶名称,存储桶的命名格式为 BucketName-APPID,此处填写的存储桶名称必须为此格式String
objectObject 名称String
headersCOS 请求附加头域Struct
paramsCOS 请求操作参数Struct
filenameObject 本地保存文件名称String
resp_headers返回 HTTP 响应消息的头域Struct

返回结果说明

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

示例

cos_pool_t *p = NULL;
int is_cname = 0;
cos_status_t *s = NULL;
cos_request_options_t *options = NULL;
cos_string_t bucket;
cos_string_t object;
cos_string_t file;
cos_table_t *resp_headers = NULL;

//创建内存池
cos_pool_create(&p, NULL);

//初始化请求选项
options = cos_request_options_create(p);
options->config = cos_config_create(options->pool);
init_test_config(options->config, is_cname);
cos_str_set(&options->config->endpoint, TEST_COS_ENDPOINT);
cos_str_set(&options->config->access_key_id, TEST_ACCESS_KEY_ID);
cos_str_set(&options->config->access_key_secret, TEST_ACCESS_KEY_SECRET);
cos_str_set(&options->config->appid, TEST_APPID);
options->config->is_cname = is_cname;
options->ctl = cos_http_controller_create(options->pool, 0);
cos_str_set(&bucket, TEST_BUCKET_NAME);

//获取对象
cos_str_set(&file, TEST_DOWNLOAD_NAME);
cos_str_set(&object, TEST_OBJECT_NAME);
s = cos_get_object_to_file(options, &bucket, &object, NULL, NULL, &file, &resp_headers);
if (cos_status_is_ok(s)) {
    printf("get object succeeded\n");
} else {
    printf("get object failed\n");
}

//销毁内存池
cos_pool_destroy(p); 

设置对象复制

功能说明

复制文件到目标路径。

方法原型

cos_status_t *cos_copy_object(const cos_request_options_t *options,
                              const cos_string_t *copy_source, 
                              const cos_string_t *dest_bucket, 
                              const cos_string_t *dest_object,
                              cos_table_t *headers,
                              cos_copy_object_params_t *copy_object_param,
                              cos_table_t **resp_headers);

参数说明

参数名称参数描述类型
optionsCOS 请求选项Struct
copy_source源文件路径String
dest_bucket目的存储桶名称,存储桶的命名格式为 BucketName-APPID,此处填写的存储桶名称必须为此格式String
dest_object目的 Object 名称String
headersCOS 请求附加头域Struct
copy_object_paramPut Object Copy 操作参数Struct
etag返回文件的 MD5 算法校验值String
last_modify返回文件最后修改时间,GMT 格式String
resp_headers返回 HTTP 响应消息的头域Struct

返回结果说明

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

示例

cos_pool_t *p = NULL;
int is_cname = 0;
cos_status_t *s = NULL;
cos_request_options_t *options = NULL;
cos_string_t bucket;
cos_string_t object;
cos_table_t *resp_headers = NULL;

//创建内存池
cos_pool_create(&p, NULL);

//初始化请求选项
options = cos_request_options_create(p);
options->config = cos_config_create(options->pool);
init_test_config(options->config, is_cname);
cos_str_set(&options->config->endpoint, TEST_COS_ENDPOINT);
cos_str_set(&options->config->access_key_id, TEST_ACCESS_KEY_ID);
cos_str_set(&options->config->access_key_secret, TEST_ACCESS_KEY_SECRET);
cos_str_set(&options->config->appid, TEST_APPID);
options->config->is_cname = is_cname;
options->ctl = cos_http_controller_create(options->pool, 0);
cos_str_set(&bucket, TEST_BUCKET_NAME);

//设置对象复制
cos_str_set(&object, TEST_OBJECT_NAME);
cos_string_t copy_source;
cos_str_set(&copy_source, TEST_COPY_SRC);
cos_copy_object_params_t *params = NULL;
params = cos_create_copy_object_params(p);
s = cos_copy_object(options, &copy_source, &bucket, &object, NULL, params, &resp_headers);
if (cos_status_is_ok(s)) {
    printf("put object copy succeeded\n");
} else {
    printf("put object copy failed\n");
}

//销毁内存池
cos_pool_destroy(p);  

删除单个对象

功能说明

在存储桶中删除指定对象。

方法原型

cos_status_t *cos_delete_object(const cos_request_options_t *options,
                                const cos_string_t *bucket, 
                                const cos_string_t *object, 
                                cos_table_t **resp_headers);

参数说明

参数名称参数描述类型
optionsCOS 请求选项Struct
bucket存储桶名称,存储桶的命名格式为 BucketName-APPID,此处填写的存储桶名称必须为此格式String
objectObject 名称String
resp_headers返回 HTTP 响应消息的头域Struct

返回结果说明

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

示例

cos_pool_t *p = NULL;
int is_cname = 0;
cos_status_t *s = NULL;
cos_request_options_t *options = NULL;
cos_string_t bucket;
cos_string_t object;
cos_table_t *resp_headers = NULL;

//创建内存池
cos_pool_create(&p, NULL);

//初始化请求选项
options = cos_request_options_create(p);
options->config = cos_config_create(options->pool);
init_test_config(options->config, is_cname);
cos_str_set(&options->config->endpoint, TEST_COS_ENDPOINT);
cos_str_set(&options->config->access_key_id, TEST_ACCESS_KEY_ID);
cos_str_set(&options->config->access_key_secret, TEST_ACCESS_KEY_SECRET);
cos_str_set(&options->config->appid, TEST_APPID);
options->config->is_cname = is_cname;
options->ctl = cos_http_controller_create(options->pool, 0);
cos_str_set(&bucket, TEST_BUCKET_NAME);

//删除单个对象
cos_str_set(&object, TEST_OBJECT_NAME);
s = cos_delete_object(options, &bucket, &object, &resp_headers);
if (cos_status_is_ok(s)) {
    printf("delete object succeeded\n");
} else {
    printf("delete object failed\n");
}

//销毁内存池
cos_pool_destroy(p); 

删除多个对象

功能说明

在存储桶中批量删除对象,最大支持单次删除1000个对象。对于返回结果,COS 提供 Verbose 和 Quiet 两种结果模式。Verbose 模式将返回每个 Object 的删除结果。Quiet 模式只返回报错的 Object 信息。

方法原型

cos_status_t *cos_delete_objects(const cos_request_options_t *options,
                                 const cos_string_t *bucket, 
                                 cos_list_t *object_list, 
                                 int is_quiet,
                                 cos_table_t **resp_headers, 
                                 cos_list_t *deleted_object_list);

参数说明

参数名称参数描述类型
optionsCOS 请求选项Struct
bucket存储桶名称,存储桶的命名格式为 BucketName-APPID,此处填写的存储桶名称必须为此格式String
object_listObject 待删除列表Struct
key待删除 Object 名称String
is_quiet决定是否启动 Quiet 模式
True(1):启动 Quiet 模式,False(0):启动 Verbose 模式。
默认为 False(0)
Boolean
resp_headers返回 HTTP 响应消息的头域Struct
deleted_object_listObject 删除信息列表Struct

返回结果说明

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

示例

cos_pool_t *p = NULL;
int is_cname = 0;
cos_status_t *s = NULL;
cos_request_options_t *options = NULL;
cos_string_t bucket;
cos_string_t object;
cos_table_t *resp_headers = NULL;

//创建内存池
cos_pool_create(&p, NULL);

//初始化请求选项
options = cos_request_options_create(p);
options->config = cos_config_create(options->pool);
init_test_config(options->config, is_cname);
cos_str_set(&options->config->endpoint, TEST_COS_ENDPOINT);
cos_str_set(&options->config->access_key_id, TEST_ACCESS_KEY_ID);
cos_str_set(&options->config->access_key_secret, TEST_ACCESS_KEY_SECRET);
cos_str_set(&options->config->appid, TEST_APPID);
options->config->is_cname = is_cname;
options->ctl = cos_http_controller_create(options->pool, 0);
cos_str_set(&bucket, TEST_BUCKET_NAME);

//设置批量删除对象
char *object_name1 = TEST_OBJECT_NAME1;
char *object_name2 = TEST_OBJECT_NAME2;
cos_object_key_t *content1 = NULL;
cos_object_key_t *content2 = NULL;
cos_list_t object_list;
cos_list_t deleted_object_list;
cos_list_init(&object_list);
cos_list_init(&deleted_object_list);
content1 = cos_create_cos_object_key(p);
cos_str_set(&content1->key, object_name1);
cos_list_add_tail(&content1->node, &object_list);
content2 = cos_create_cos_object_key(p);
cos_str_set(&content2->key, object_name2);
cos_list_add_tail(&content2->node, &object_list);

//批量删除对象
int is_quiet = COS_TRUE;
cos_str_set(&object, TEST_OBJECT_NAME);
s = cos_delete_objects(options, &bucket, &object_list, is_quiet, &resp_headers, &deleted_object_list);
if (cos_status_is_ok(s)) {
    printf("delete objects succeeded\n");
} else {
    printf("delete objects failed\n");
}

//销毁内存池
cos_pool_destroy(p); 

分块操作

查询分块上传

功能说明

查询正在进行中的分块上传信息。单次最多列出1000个正在进行中的分块上传。

方法原型

cos_status_t *cos_list_multipart_upload(const cos_request_options_t *options,
                                        const cos_string_t *bucket, 
                                        cos_list_multipart_upload_params_t *params, 
                                        cos_table_t **resp_headers);

参数说明

参数名称参数描述类型
optionsCOS 请求选项Struct
bucket存储桶名称,存储桶的命名格式为 BucketName-APPID,此处填写的存储桶名称必须为此格式String
paramsList Multipart Uploads 操作参数Struct
encoding_type规定返回值的编码方式String
prefix前缀匹配,用来规定返回的文件前缀地址String
upload_id_marker假如返回条目被截断,则返回 NextMarker 就是下一个条目的起点String
delimiter界符为一个符号。
如果有 Prefix,则将 Prefix 到 delimiter 之间的相同路径归为一类,定义为 Common Prefix,然后列出所有 Common Prefix。
如果没有 Prefix,则从路径起点开始
String
max_ret单次返回最大的条目数量,默认1000String
key_marker与 upload-id-marker 一起使用。
当 upload-id-marker 未被指定时,ObjectName 字母顺序大于 key-marker 的条目将被列出。
当 upload-id-marker 被指定时,ObjectName 字母顺序大于 key-marker 的条目被列出,ObjectName 字母顺序等于 key-marker 同时 UploadID 大于 upload-id-marker 的条目将被列出
String
upload_id_marker与 key-marker 一起使用。
当 key-marker 未被指定时,upload-id-marker 将被忽略。
当 key-marker 被指定时,ObjectName 字母顺序大于 key-marker 的条目被列出,ObjectName 字母顺序等于 key-marker 同时 UploadID 大于 upload-id-marker 的条目将被列出
String
truncated返回条目是否被截断,'true' 或者 'false'Boolean
next_key_marker假如返回条目被截断,则返回 NextMarker 就是下一个条目的起点String
next_upload_id_marker假如返回条目被截断,则返回 NextMarker 就是下一个条目的起点String
upload_list分块上传的信息Struct
keyObject 的名称String
upload_id标示本次分块上传的 IDString
initiated标示本次分块上传任务的启动时间String
resp_headers返回 HTTP 响应消息的头域Struct
typedef struct {
    cos_list_t node;
    cos_string_t key;
    cos_string_t upload_id;
    cos_string_t initiated;
} cos_list_multipart_upload_content_t;

返回结果说明

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

示例

cos_pool_t *p = NULL;
cos_string_t bucket;
int is_cname = 0;
cos_table_t *resp_headers = NULL;
cos_request_options_t *options = NULL;
cos_status_t *s = NULL;
cos_list_multipart_upload_params_t *list_multipart_params = NULL;

//创建内存池 & 初始化请求选项
cos_pool_create(&p, NULL);
options = cos_request_options_create(p);
init_test_request_options(options, is_cname);
cos_str_set(&bucket, TEST_BUCKET_NAME);

//查询分块上传
list_multipart_params = cos_create_list_multipart_upload_params(p);
list_multipart_params->max_ret = 999;
s = cos_list_multipart_upload(options, &bucket, list_multipart_params, &resp_headers);
log_status(s);

//销毁内存池
cos_pool_destroy(p);

初始化分块上传

功能说明

Initiate Multipart Upload 请求实现初始化分片上传,成功执行此请求以后会返回 Upload ID 用于后续的 Upload Part 请求。

方法原型

cos_status_t *cos_init_multipart_upload(const cos_request_options_t *options, 
                                        const cos_string_t *bucket, 
                                        const cos_string_t *object, 
                                        cos_string_t *upload_id, 
                                        cos_table_t *headers,
                                        cos_table_t **resp_headers);

参数说明

参数名称参数描述类型
optionsCOS 请求选项Struct
bucket存储桶名称,存储桶的命名格式为 BucketName-APPID,此处填写的存储桶名称必须为此格式String
objectObject 名称String
upload_id操作返回的 Upload IDString
headersCOS 请求附加头域Struct
resp_headers返回 HTTP 响应消息的头域Struct

返回结果说明

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

示例

cos_pool_t *p = NULL;
int is_cname = 0;
cos_status_t *s = NULL;
cos_request_options_t *options = NULL;
cos_string_t bucket;
cos_string_t object;
cos_string_t file;
cos_table_t *resp_headers = NULL;

//创建内存池
cos_pool_create(&p, NULL);

//初始化请求选项
options = cos_request_options_create(p);
options->config = cos_config_create(options->pool);
init_test_config(options->config, is_cname);
cos_str_set(&options->config->endpoint, TEST_COS_ENDPOINT);
cos_str_set(&options->config->access_key_id, TEST_ACCESS_KEY_ID);
cos_str_set(&options->config->access_key_secret, TEST_ACCESS_KEY_SECRET);
cos_str_set(&options->config->appid, TEST_APPID);
options->config->is_cname = is_cname;
options->ctl = cos_http_controller_create(options->pool, 0);
cos_str_set(&bucket, TEST_BUCKET_NAME);

//初始化分块上传
cos_str_set(&object, TEST_OBJECT_NAME);
s = cos_init_multipart_upload(options, &bucket, &object, 
                              &upload_id, headers, &resp_headers);
if (cos_status_is_ok(s)) {
    printf("init multipart upload succeeded\n");
} else {
    printf("init multipart upload failed\n");
}

//销毁内存池
cos_pool_destroy(p); 

查询已上传块

功能说明

查询特定分块上传操作中的已上传的块。

方法原型

cos_status_t *cos_list_upload_part(const cos_request_options_t *options,
                                   const cos_string_t *bucket, 
                                   const cos_string_t *object, 
                                   const cos_string_t *upload_id, 
                                   cos_list_upload_part_params_t *params,
                                   cos_table_t **resp_headers);

参数说明

参数名称参数描述类型
optionsCOS 请求选项Struct
bucket存储桶名称,存储桶的命名格式为 BucketName-APPID,此处填写的存储桶名称必须为此格式String
objectObject 名称String
upload_id上传任务编号String
paramsList Parts 操作参数Struct
part_number_marker默认以 UTF-8 二进制顺序列出条目,所有列出条目从 marker 开始String
encoding_type规定返回值的编码方式String
max_ret单次返回最大的条目数量,默认1000String
truncated返回条目是否被截断,'true' 或者 'false'Boolean
next_part_number_marker假如返回条目被截断,则返回 NextMarker 就是下一个条目的起点String
part_list完成分块的信息Struct
part_number分块编号String
size分块大小,单位 ByteString
etag分块的 SHA-1 算法校验值String
last_modified分块最后修改时间String
resp_headers返回 HTTP 响应消息的头域Struct

返回结果说明

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

示例

cos_pool_t *p = NULL;
int is_cname = 0;
cos_status_t *s = NULL;
cos_request_options_t *options = NULL;
cos_string_t bucket;
cos_string_t object;
cos_string_t file;
cos_table_t *resp_headers = NULL;
cos_list_part_content_t *part_content = NULL;
cos_complete_part_content_t *complete_part_content = NULL;
int part_num = 1;
int64_t pos = 0;
int64_t file_length = 0;

//创建内存池
cos_pool_create(&p, NULL);

//初始化请求选项
options = cos_request_options_create(p);
options->config = cos_config_create(options->pool);
init_test_config(options->config, is_cname);
cos_str_set(&options->config->endpoint, TEST_COS_ENDPOINT);
cos_str_set(&options->config->access_key_id, TEST_ACCESS_KEY_ID);
cos_str_set(&options->config->access_key_secret, TEST_ACCESS_KEY_SECRET);
cos_str_set(&options->config->appid, TEST_APPID);
options->config->is_cname = is_cname;
options->ctl = cos_http_controller_create(options->pool, 0);
cos_str_set(&bucket, TEST_BUCKET_NAME);

//查询已上传块
params = cos_create_list_upload_part_params(p);
params->max_ret = 1000;
cos_list_init(&complete_part_list);
s = cos_list_upload_part(options, &bucket, &object, &upload_id, 
                         params, &resp_headers);

if (cos_status_is_ok(s)) {
    printf("List multipart succeeded\n");
} else {
    printf("List multipart failed\n");
    cos_pool_destroy(p);
    return;
}

cos_list_for_each_entry(cos_list_part_content_t, part_content, &params->part_list, node) {
    complete_part_content = cos_create_complete_part_content(p);
    cos_str_set(&complete_part_content->part_number, part_content->part_number.data);
    cos_str_set(&complete_part_content->etag, part_content->etag.data);
    cos_list_add_tail(&complete_part_content->node, &complete_part_list);
}

//完成分块上传
s = cos_complete_multipart_upload(options, &bucket, &object, &upload_id,
                                  &complete_part_list, complete_headers, &resp_headers);

if (cos_status_is_ok(s)) {
    printf("Complete multipart upload from file succeeded, upload_id:%.*s\n", 
           upload_id.len, upload_id.data);
} else {
    printf("Complete multipart upload from file failed\n");
}

//销毁内存池
cos_pool_destroy(p); 

上传分块

功能说明

分块上传文件。Upload Part 请求实现在初始化以后的分块上传,支持的块的数量为1到10000,块的大小为1MB到5GB。在每次请求 Upload Part 时,需要携带 partNumber 和 uploadID,partNumber 为块的编号,支持乱序上传。

方法原型

cos_status_t *cos_upload_part_from_file(const cos_request_options_t *options,
                                        const cos_string_t *bucket, 
                                        const cos_string_t *object,
                                        const cos_string_t *upload_id, 
                                        int part_num, 
                                        cos_upload_file_t *upload_file,
                                        cos_table_t **resp_headers);

参数说明

参数名称参数描述类型
optionsCOS 请求选项Struct
bucket存储桶名称,存储桶的命名格式为 BucketName-APPID,此处填写的存储桶名称必须为此格式String
objectObject 名称String
upload_id上传任务编号String
part_num分块编号Int
upload_file待上传本地文件信息Struct
resp_headers返回 HTTP 响应消息的头域Struct

返回结果说明

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

示例

cos_pool_t *p = NULL;
int is_cname = 0;
cos_status_t *s = NULL;
cos_request_options_t *options = NULL;
cos_string_t bucket;
cos_string_t object;
cos_string_t file;
cos_table_t *resp_headers = NULL;
int part_num = 1;
int64_t pos = 0;
int64_t file_length = 0;

//创建内存池
cos_pool_create(&p, NULL);

//初始化请求选项
options = cos_request_options_create(p);
options->config = cos_config_create(options->pool);
init_test_config(options->config, is_cname);
cos_str_set(&options->config->endpoint, TEST_COS_ENDPOINT);
cos_str_set(&options->config->access_key_id, TEST_ACCESS_KEY_ID);
cos_str_set(&options->config->access_key_secret, TEST_ACCESS_KEY_SECRET);
cos_str_set(&options->config->appid, TEST_APPID);
options->config->is_cname = is_cname;
options->ctl = cos_http_controller_create(options->pool, 0);
cos_str_set(&bucket, TEST_BUCKET_NAME);

//上传分块
int res = COSE_OK;
cos_upload_file_t *upload_file = NULL;
cos_file_buf_t *fb = cos_create_file_buf(p);
res = cos_open_file_for_all_read(p, TEST_MULTIPART_FILE, fb);
if (res != COSE_OK) {
    cos_error_log("Open read file fail, filename:%s\n", TEST_MULTIPART_FILE);
    return;
}
file_length = fb->file_last;
apr_file_close(fb->file);
while(pos < file_length) {
    upload_file = cos_create_upload_file(p);
    cos_str_set(&upload_file->filename, TEST_MULTIPART_FILE);
    upload_file->file_pos = pos;
    pos += 2 * 1024 * 1024;
    upload_file->file_last = pos < file_length ? pos : file_length; //2MB
    s = cos_upload_part_from_file(options, &bucket, &object, &upload_id,
                                  part_num++, upload_file, &resp_headers);

    if (cos_status_is_ok(s)) {
        printf("upload part succeeded\n");
    } else {
        printf("upload part failed\n");
    }
}

//销毁内存池
cos_pool_destroy(p); 

复制分块

功能说明

将其他对象复制为一个分块。

方法原型

cos_status_t *cos_upload_part_copy(const cos_request_options_t *options,
                                   cos_upload_part_copy_params_t *params, 
                                   cos_table_t *headers, 
                                   cos_table_t **resp_headers);

参数说明

参数名称参数描述类型
optionsCOS 请求选项Struct
params复制分块参数信息Struct
copy_source源文件路径String
dest_bucket目的 存储桶名称,存储桶的命名格式为 BucketName-APPID,此处填写的存储桶名称必须为此格式String
dest_object目的 Object 名称String
upload_id上传任务编号String
part_num分块编号Int
range_start源文件起始偏移Int
range_end源文件终止偏移Int
rsp_content复制分块结果信息Struct
etag返回文件的 MD5 算法校验值String
last_modify返回文件最后修改时间,GMT 格式String
resp_headers返回 HTTP 响应消息的头域Struct

返回结果说明

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

示例

cos_pool_t *p = NULL;
cos_request_options_t *options = NULL;
cos_string_t bucket;
cos_string_t object;
cos_string_t file;
int is_cname = 0;
cos_string_t upload_id;
cos_list_upload_part_params_t *list_upload_part_params = NULL;
cos_upload_part_copy_params_t *upload_part_copy_params1 = NULL;
cos_upload_part_copy_params_t *upload_part_copy_params2 = NULL;
cos_table_t *headers = NULL;
cos_table_t *query_params = NULL;
cos_table_t *resp_headers = NULL;
cos_table_t *list_part_resp_headers = NULL;
cos_list_t complete_part_list;
cos_list_part_content_t *part_content = NULL;
cos_complete_part_content_t *complete_content = NULL;
cos_table_t *complete_resp_headers = NULL;
cos_status_t *s = NULL;
int part1 = 1;
int part2 = 2;
char *local_filename = "test_upload_part_copy.file";
char *download_filename = "test_upload_part_copy.file.download";
char *source_object_name = "cos_test_upload_part_copy_source_object";
char *dest_object_name = "cos_test_upload_part_copy_dest_object";
FILE *fd = NULL;
cos_string_t download_file;
cos_string_t dest_bucket;
cos_string_t dest_object;
int64_t range_start1 = 0;
int64_t range_end1 = 6000000;
int64_t range_start2 = 6000001;
int64_t range_end2;
cos_string_t data;

cos_pool_create(&p, NULL);
options = cos_request_options_create(p);

//创建一个10MB本地随机文件    
make_rand_string(p, 10 * 1024 * 1024, &data);
fd = fopen(local_filename, "w");
fwrite(data.data, sizeof(data.data[0]), data.len, fd);
fclose(fd);    

//使用本地文件上传对象
init_test_request_options(options, is_cname);
cos_str_set(&bucket, "source-1253666666");
cos_str_set(&object, "cos_test_upload_part_copy_source_object");
cos_str_set(&file, local_filename);
s = cos_put_object_from_file(options, &bucket, &object, &file, NULL, &resp_headers);
log_status(s);

//初始化分块上传
cos_str_set(&object, dest_object_name);
s = cos_init_multipart_upload(options, &bucket, &object, 
                              &upload_id, NULL, &resp_headers);
log_status(s);

//使用已上传对象复制分块1
upload_part_copy_params1 = cos_create_upload_part_copy_params(p);
cos_str_set(&upload_part_copy_params1->copy_source, "mybucket-1253666666.cn-south.myqcloud.com/cos_test_upload_part_copy_source_object");
cos_str_set(&upload_part_copy_params1->dest_bucket, TEST_BUCKET_NAME);
cos_str_set(&upload_part_copy_params1->dest_object, dest_object_name);
cos_str_set(&upload_part_copy_params1->upload_id, upload_id.data);
upload_part_copy_params1->part_num = part1;
upload_part_copy_params1->range_start = range_start1;
upload_part_copy_params1->range_end = range_end1;
headers = cos_table_make(p, 0);
s = cos_upload_part_copy(options, upload_part_copy_params1, headers, &resp_headers);
log_status(s);
printf("last modified:%s, etag:%s\n", upload_part_copy_params1->rsp_content->last_modify.data, upload_part_copy_params1->rsp_content->etag.data);

//使用已上传对象复制分块2
resp_headers = NULL;
range_end2 = get_file_size(local_filename) - 1;
upload_part_copy_params2 = cos_create_upload_part_copy_params(p);
cos_str_set(&upload_part_copy_params2->copy_source, "mybucket-1253666666.cn-south.myqcloud.com/cos_test_upload_part_copy_source_object");
cos_str_set(&upload_part_copy_params2->dest_bucket, TEST_BUCKET_NAME);
cos_str_set(&upload_part_copy_params2->dest_object, dest_object_name);
cos_str_set(&upload_part_copy_params2->upload_id, upload_id.data);
upload_part_copy_params2->part_num = part2;
upload_part_copy_params2->range_start = range_start2;
upload_part_copy_params2->range_end = range_end2;
headers = cos_table_make(p, 0);
s = cos_upload_part_copy(options, upload_part_copy_params2, headers, &resp_headers);
log_status(s);
printf("last modified:%s, etag:%s\n", upload_part_copy_params1->rsp_content->last_modify.data, upload_part_copy_params1->rsp_content->etag.data);

//列出已上传对象
list_upload_part_params = cos_create_list_upload_part_params(p);
list_upload_part_params->max_ret = 10;
cos_list_init(&complete_part_list);

cos_str_set(&dest_bucket, TEST_BUCKET_NAME);
cos_str_set(&dest_object, dest_object_name);
s = cos_list_upload_part(options, &dest_bucket, &dest_object, &upload_id, 
                         list_upload_part_params, &list_part_resp_headers);
log_status(s);
cos_list_for_each_entry(cos_list_part_content_t, part_content, &list_upload_part_params->part_list, node) {
    complete_content = cos_create_complete_part_content(p);
    cos_str_set(&complete_content->part_number, part_content->part_number.data);
    cos_str_set(&complete_content->etag, part_content->etag.data);
    cos_list_add_tail(&complete_content->node, &complete_part_list);
}

//完成分块上传
headers = cos_table_make(p, 0);
s = cos_complete_multipart_upload(options, &dest_bucket, &dest_object, 
                                  &upload_id, &complete_part_list, headers, &complete_resp_headers);
log_status(s);

//对比复制分块上传生成的对象和本地文件是否匹配
headers = cos_table_make(p, 0);
cos_str_set(&download_file, download_filename);
s = cos_get_object_to_file(options, &dest_bucket, &dest_object, headers, 
                           query_params, &download_file, &resp_headers);
log_status(s);
printf("local file len = %"APR_INT64_T_FMT", download file len = %"APR_INT64_T_FMT, get_file_size(local_filename), get_file_size(download_filename));
remove(download_filename);
remove(local_filename);

//销毁内存池
cos_pool_destroy(p);

完成分块上传

功能说明

完成整个文件的分块上传。当您已经使用 Upload Parts 上传所有块以后,您可以用该 API 完成上传。在使用该 API 时,您必须在 Body 中给出每一个块的 PartNumber 和 ETag,用来校验块的准确性。

方法原型

cos_status_t *cos_complete_multipart_upload(const cos_request_options_t *options,
                                            const cos_string_t *bucket, 
                                            const cos_string_t *object, 
                                            const cos_string_t *upload_id, 
                                            cos_list_t *part_list, 
                                            cos_table_t *headers,
                                            cos_table_t **resp_headers);

参数说明

参数名称参数描述类型
optionsCOS 请求选项Struct
bucket存储桶名称,存储桶的命名格式为 BucketName-APPID,此处填写的存储桶名称必须为此格式String
objectObject 名称String
upload_id上传任务编号String
part_list完成分块上传的参数Struct
part_number分块编号String
etag分块的 ETag 值,为 sha1 校验值,需要在校验值前后加上双引号,如 "3a0f1fd698c235af9cf098cb74aa25bc"String
headersCOS 请求附加头域Struct
resp_headers返回 HTTP 响应消息的头域Struct

返回结果说明

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

示例

cos_pool_t *p = NULL;
int is_cname = 0;
cos_status_t *s = NULL;
cos_request_options_t *options = NULL;
cos_string_t bucket;
cos_string_t object;
cos_string_t file;
cos_table_t *resp_headers = NULL;
cos_list_part_content_t *part_content = NULL;
cos_complete_part_content_t *complete_part_content = NULL;
int part_num = 1;
int64_t pos = 0;
int64_t file_length = 0;

//创建内存池
cos_pool_create(&p, NULL);

//初始化请求选项
options = cos_request_options_create(p);
options->config = cos_config_create(options->pool);
init_test_config(options->config, is_cname);
cos_str_set(&options->config->endpoint, TEST_COS_ENDPOINT);
cos_str_set(&options->config->access_key_id, TEST_ACCESS_KEY_ID);
cos_str_set(&options->config->access_key_secret, TEST_ACCESS_KEY_SECRET);
cos_str_set(&options->config->appid, TEST_APPID);
options->config->is_cname = is_cname;
options->ctl = cos_http_controller_create(options->pool, 0);
cos_str_set(&bucket, TEST_BUCKET_NAME);

//查询已上传分块
params = cos_create_list_upload_part_params(p);
params->max_ret = 1000;
cos_list_init(&complete_part_list);
s = cos_list_upload_part(options, &bucket, &object, &upload_id, 
                         params, &resp_headers);

if (cos_status_is_ok(s)) {
    printf("List multipart succeeded\n");
} else {
    printf("List multipart failed\n");
    cos_pool_destroy(p);
    return;
}

cos_list_for_each_entry(cos_list_part_content_t, part_content, &params->part_list, node) {
    complete_part_content = cos_create_complete_part_content(p);
    cos_str_set(&complete_part_content->part_number, part_content->part_number.data);
    cos_str_set(&complete_part_content->etag, part_content->etag.data);
    cos_list_add_tail(&complete_part_content->node, &complete_part_list);
}

//完成分块上传
s = cos_complete_multipart_upload(options, &bucket, &object, &upload_id,
                                  &complete_part_list, complete_headers, &resp_headers);

if (cos_status_is_ok(s)) {
    printf("Complete multipart upload from file succeeded, upload_id:%.*s\n", 
           upload_id.len, upload_id.data);
} else {
    printf("Complete multipart upload from file failed\n");
}

//销毁内存池
cos_pool_destroy(p); 

终止分块上传

功能说明

终止一个分块上传操作并删除已上传的块。当您调用 Abort Multipart Upload 时,如果有正在使用这个 Upload Parts 上传块的请求,则 Upload Parts 会返回失败。

方法原型

cos_status_t *cos_abort_multipart_upload(const cos_request_options_t *options,
                                         const cos_string_t *bucket, 
                                         const cos_string_t *object, 
                                         cos_string_t *upload_id, 
                                         cos_table_t **resp_headers);

参数说明

参数名称参数描述类型
optionsCOS 请求选项Struct
bucket存储桶名称,存储桶的命名格式为 BucketName-APPID,此处填写的存储桶名称必须为此格式String
objectObject 名称String
upload_id上传任务编号String
resp_headers返回 HTTP 响应消息的头域Struct

返回结果说明

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

示例

cos_pool_t *p = NULL;
cos_string_t bucket;
cos_string_t object;
int is_cname = 0;
cos_table_t *headers = NULL;
cos_table_t *resp_headers = NULL;
cos_request_options_t *options = NULL;
cos_string_t upload_id;
cos_status_t *s = NULL;

//创建内存池 & 初始化请求选项
cos_pool_create(&p, NULL);
options = cos_request_options_create(p);
init_test_request_options(options, is_cname);
headers = cos_table_make(p, 1);
cos_str_set(&bucket, TEST_BUCKET_NAME);
cos_str_set(&object, TEST_MULTIPART_OBJECT);

//初始化分块上传
s = cos_init_multipart_upload(options, &bucket, &object, 
                              &upload_id, headers, &resp_headers);

if (cos_status_is_ok(s)) {
    printf("Init multipart upload succeeded, upload_id:%.*s\n", 
           upload_id.len, upload_id.data);
} else {
    printf("Init multipart upload failed\n"); 
    cos_pool_destroy(p);
    return;
}

//终止分块上传
s = cos_abort_multipart_upload(options, &bucket, &object, &upload_id, 
                               &resp_headers);

if (cos_status_is_ok(s)) {
    printf("Abort multipart upload succeeded, upload_id::%.*s\n", 
           upload_id.len, upload_id.data);
} else {
    printf("Abort multipart upload failed\n"); 
}    

//销毁内存池
cos_pool_destroy(p);

其他操作

设置对象 ACL

功能说明

设置存储桶中某个对象的访问控制列表。

方法原型

cos_status_t *cos_put_object_acl(const cos_request_options_t *options, 
                                 const cos_string_t *bucket,
                                 const cos_string_t *object,  
                                 cos_acl_e cos_acl,
                                 const cos_string_t *grant_read,
                                 const cos_string_t *grant_write,
                                 const cos_string_t *grant_full_ctrl,
                                 cos_table_t **resp_headers);

参数说明

参数名称参数描述类型
optionsCOS 请求选项Struct
bucket存储桶名称,存储桶的命名格式为 BucketName-APPID,此处填写的存储桶名称必须为此格式String
objectObject 名称String
cos_acl允许用户自定义权限。
有效值:COS_ACL_PRIVATE(0),COS_ACL_PUBLIC_READ(1)
默认值:COS_ACL_PRIVATE(0)
Enum
grant_read读权限授予者String
grant_write写权限授予者String
grant_full_ctrl读写权限授予者String
resp_headers返回 HTTP 响应消息的头域Struct

返回结果说明

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

示例

cos_pool_t *p = NULL;
int is_cname = 0;
cos_status_t *s = NULL;
cos_request_options_t *options = NULL;
cos_string_t bucket;
cos_string_t object;
cos_table_t *resp_headers = NULL;

//创建内存池
cos_pool_create(&p, NULL);

//初始化请求选项
options = cos_request_options_create(p);
options->config = cos_config_create(options->pool);
init_test_config(options->config, is_cname);
cos_str_set(&options->config->endpoint, TEST_COS_ENDPOINT);
cos_str_set(&options->config->access_key_id, TEST_ACCESS_KEY_ID);
cos_str_set(&options->config->access_key_secret, TEST_ACCESS_KEY_SECRET);
cos_str_set(&options->config->appid, TEST_APPID);
options->config->is_cname = is_cname;
options->ctl = cos_http_controller_create(options->pool, 0);
cos_str_set(&bucket, TEST_BUCKET_NAME);

//设置对象 ACL
cos_str_set(&object, TEST_OBJECT_NAME);
cos_string_t read;
cos_str_set(&read, "id=\"qcs::cam::uin/12345:uin/12345\", id=\"qcs::cam::uin/45678:uin/45678\"");
s = cos_put_object_acl(options, &bucket, &object, cos_acl, &read, NULL, NULL, &resp_headers);
if (cos_status_is_ok(s)) {
    printf("put object acl succeeded\n");
} else {
    printf("put object acl failed\n");
}

//销毁内存池
cos_pool_destroy(p);  

查询对象 ACL

功能说明

查询对象的访问控制列表。

方法原型

cos_status_t *cos_get_object_acl(const cos_request_options_t *options, 
                                 const cos_string_t *bucket,
                                 const cos_string_t *object,
                                 cos_acl_params_t *acl_param, 
                                 cos_table_t **resp_headers)

参数说明

参数名称参数描述类型
optionsCOS 请求选项Struct
bucket存储桶名称,存储桶的命名格式为 BucketName-APPID,此处填写的存储桶名称必须为此格式String
objectObject 名称String
acl_param请求操作参数Struct
owner_id请求操作返回的 Bucket 持有者 IDString
owner_name请求操作返回的 Bucket 持有者的名称String
object_list请求操作返回的被授权者信息与权限信息Struct
type请求操作返回的被授权者账户类型String
id请求操作返回的被授权者用户 IDString
name请求操作返回的被授权者用户名称String
permission请求操作返回的被授权者权限信息String
resp_headers返回 HTTP 响应消息的头域Struct

返回结果说明

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

示例

cos_pool_t *p = NULL;
int is_cname = 0;
cos_status_t *s = NULL;
cos_request_options_t *options = NULL;
cos_string_t bucket;
cos_string_t object;
cos_table_t *resp_headers = NULL;

//创建内存池
cos_pool_create(&p, NULL);

//初始化请求选项
options = cos_request_options_create(p);
options->config = cos_config_create(options->pool);
init_test_config(options->config, is_cname);
cos_str_set(&options->config->endpoint, TEST_COS_ENDPOINT);
cos_str_set(&options->config->access_key_id, TEST_ACCESS_KEY_ID);
cos_str_set(&options->config->access_key_secret, TEST_ACCESS_KEY_SECRET);
cos_str_set(&options->config->appid, TEST_APPID);
options->config->is_cname = is_cname;
options->ctl = cos_http_controller_create(options->pool, 0);
cos_str_set(&bucket, TEST_BUCKET_NAME);

//获取对象 ACL
cos_acl_params_t *acl_params2 = NULL;
acl_params2 = cos_create_acl_params(p);
s = cos_get_object_acl(options, &bucket, &object, acl_params2, &resp_headers);
if (cos_status_is_ok(s)) {
    printf("get object acl succeeded\n");
    printf("acl owner id:%s, name:%s\n", acl_params2->owner_id.data, acl_params2->owner_name.data);
    acl_content = NULL;
    cos_list_for_each_entry(cos_acl_grantee_content_t, acl_content, &acl_params2->grantee_list, node) {
        printf("acl grantee id:%s, name:%s, permission:%s\n", acl_content->id.data, acl_content->name.data, acl_content->permission.data);
    }
} else {
    printf("get object acl failed\n");
}

//销毁内存池
cos_pool_destroy(p); 

存储桶管理

简介

本文档提供关于跨域访问、生命周期、版本控制、跨地域复制相关的 API 概览以及 SDK 示例代码。

跨域访问

API操作名操作描述
PUT Bucket cors设置跨域配置设置存储桶的跨域访问权限
GET Bucket cors查询跨域配置查询存储桶的跨域访问配置信息
DELETE Bucket cors删除跨域配置删除存储桶的跨域访问配置信息

版本控制

API操作名操作描述
PUT Bucket versioning设置版本控制设置存储桶的版本控制功能
GET Bucket versioning查询版本控制查询存储桶的版本控制信息

跨地域复制

API操作名操作描述
PUT Bucket replication设置跨地域复制设置存储桶的跨地域复制规则
GET Bucket replication查询跨地域复制查询存储桶的跨地域复制规则
DELETE Bucket replication删除跨地域复制删除存储桶的跨地域复制规则

跨域访问

设置跨域配置

功能说明

设置存储桶的跨域访问权限。

方法原型

cos_status_t *cos_put_bucket_cors(const cos_request_options_t *options,
                                  const cos_string_t *bucket, 
                                  cos_list_t *cors_rule_list, 
                                  cos_table_t **resp_headers);

参数说明

参数名称参数描述类型
optionsCOS 请求选项Struct
bucket存储桶名称,存储桶的命名格式为 BucketName-APPID ,此处填写的存储桶名称必须为此格式String
cors_rule_list存储桶跨域配置信息Struct
id配置规则 IDString
allowed_origin允许的访问来源,支持通配符`*`String
allowed_method允许的 HTTP 操作,枚举值:GET,PUT,HEAD,POST,DELETEString
allowed_header在发送 OPTIONS 请求时告知服务端,接下来的请求可以使用哪些自定义的 HTTP 请求头部,支持通配符`*`String
expose_header设置浏览器可以接收到的来自服务器端的自定义头部信息String
max_age_seconds设置 OPTIONS 请求得到结果的有效期Int
resp_headers返回 HTTP 响应消息的头域Struct

返回结果说明

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

示例

cos_pool_t *p = NULL;
int is_cname = 0;
cos_status_t *s = NULL;
cos_request_options_t *options = NULL;
cos_string_t bucket;
cos_table_t *resp_headers = NULL;

//创建内存池
cos_pool_create(&p, NULL);

//初始化请求选项
options = cos_request_options_create(p);
options->config = cos_config_create(options->pool);
init_test_config(options->config, is_cname);
cos_str_set(&options->config->endpoint, TEST_COS_ENDPOINT);
cos_str_set(&options->config->access_key_id, TEST_ACCESS_KEY_ID);
cos_str_set(&options->config->access_key_secret, TEST_ACCESS_KEY_SECRET);
cos_str_set(&options->config->appid, TEST_APPID);
options->config->is_cname = is_cname;
options->ctl = cos_http_controller_create(options->pool, 0);
cos_str_set(&bucket, TEST_BUCKET_NAME);

//设置跨域配置信息
cos_list_t rule_list;
cos_list_init(&rule_list);
cos_cors_rule_content_t *rule_content = NULL;

rule_content = cos_create_cors_rule_content(p);
cos_str_set(&rule_content->id, "testrule1");
cos_str_set(&rule_content->allowed_origin, "http://www.qq1.com");
cos_str_set(&rule_content->allowed_method, "GET");
cos_str_set(&rule_content->allowed_header, "*");
cos_str_set(&rule_content->expose_header, "xxx");
rule_content->max_age_seconds = 3600;
cos_list_add_tail(&rule_content->node, &rule_list);

rule_content = cos_create_cors_rule_content(p);
cos_str_set(&rule_content->id, "testrule2");
cos_str_set(&rule_content->allowed_origin, "http://www.qq2.com");
cos_str_set(&rule_content->allowed_method, "GET");
cos_str_set(&rule_content->allowed_header, "*");
cos_str_set(&rule_content->expose_header, "yyy");
rule_content->max_age_seconds = 7200;
cos_list_add_tail(&rule_content->node, &rule_list);

rule_content = cos_create_cors_rule_content(p);
cos_str_set(&rule_content->id, "testrule3");
cos_str_set(&rule_content->allowed_origin, "http://www.qq3.com");
cos_str_set(&rule_content->allowed_method, "GET");
cos_str_set(&rule_content->allowed_header, "*");
cos_str_set(&rule_content->expose_header, "zzz");
rule_content->max_age_seconds = 60;
cos_list_add_tail(&rule_content->node, &rule_list);

//设置跨域配置
s = cos_put_bucket_cors(options, &bucket, &rule_list, &resp_headers);
if (cos_status_is_ok(s)) {
        printf("put bucket cors succeeded\n");
} else {
        printf("put bucket cors failed\n");
}

//销毁内存池
cos_pool_destroy(p); 

查询跨域配置

功能说明

查询存储桶的跨域访问配置信息。

方法原型

cos_status_t *cos_get_bucket_cors(const cos_request_options_t *options,
                                  const cos_string_t *bucket, 
                                  cos_list_t *cors_rule_list, 
                                  cos_table_t **resp_headers);

参数说明

参数名称参数描述类型
optionsCOS 请求选项Struct
bucket存储桶名称,存储桶的命名格式为 BucketName-APPID,此处填写的存储桶名称必须为此格式String
cors_rule_list存储桶跨域配置信息Struct
id配置规则 IDString
allowed_origin允许的访问来源,支持通配符`*`String
allowed_method允许的 HTTP 操作,枚举值:GET,PUT,HEAD,POST,DELETEString
allowed_header在发送 OPTIONS 请求时告知服务端,接下来的请求可以使用哪些自定义的 HTTP 请求头部,支持通配符`*`String
expose_header设置浏览器可以接收到的来自服务器端的自定义头部信息String
max_age_seconds设置 OPTIONS 请求得到结果的有效期Int
resp_headers返回 HTTP 响应消息的头域Struct

返回结果说明

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

示例

cos_pool_t *p = NULL;
int is_cname = 0;
cos_status_t *s = NULL;
cos_request_options_t *options = NULL;
cos_string_t bucket;
cos_table_t *resp_headers = NULL;

//创建内存池
cos_pool_create(&p, NULL);

//初始化请求选项
options = cos_request_options_create(p);
options->config = cos_config_create(options->pool);
init_test_config(options->config, is_cname);
cos_str_set(&options->config->endpoint, TEST_COS_ENDPOINT);
cos_str_set(&options->config->access_key_id, TEST_ACCESS_KEY_ID);
cos_str_set(&options->config->access_key_secret, TEST_ACCESS_KEY_SECRET);
cos_str_set(&options->config->appid, TEST_APPID);
options->config->is_cname = is_cname;
options->ctl = cos_http_controller_create(options->pool, 0);
cos_str_set(&bucket, TEST_BUCKET_NAME);

//获取跨域配置
cos_list_t rule_list_ret;
cos_list_init(&rule_list_ret);
s = cos_get_bucket_cors(options, &bucket, &rule_list_ret, &resp_headers);
if (cos_status_is_ok(s)) {
        printf("get bucket cors succeeded\n");
        cos_cors_rule_content_t *content = NULL;
        cos_list_for_each_entry(cos_cors_rule_content_t, content, &rule_list_ret, node) {
                printf("cors id:%s, allowed_origin:%s, allowed_method:%s, allowed_header:%s, expose_header:%s, max_age_seconds:%d\n",
                        content->id.data, content->allowed_origin.data, content->allowed_method.data, content->allowed_header.data, content->expose_header.data, content->max_age_seconds);
        }
} else {
        printf("get bucket cors failed\n");
}

//销毁内存池
cos_pool_destroy(p); 

删除跨域配置

功能说明

删除存储桶的跨域访问配置信息。

方法原型

cos_status_t *cos_delete_bucket_cors(const cos_request_options_t *options,
                                     const cos_string_t *bucket, 
                                     cos_table_t **resp_headers);

参数说明

参数名称参数描述类型
optionsCOS 请求选项Struct
bucket存储桶名称,存储桶的命名格式为 BucketName-APPID ,此处填写的存储桶名称必须为此格式String
resp_headers返回 HTTP 响应消息的头域Struct

返回结果说明

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

示例

cos_pool_t *p = NULL;
int is_cname = 0;
cos_status_t *s = NULL;
cos_request_options_t *options = NULL;
cos_string_t bucket;
cos_table_t *resp_headers = NULL;

//创建内存池
cos_pool_create(&p, NULL);

//初始化请求选项
options = cos_request_options_create(p);
options->config = cos_config_create(options->pool);
init_test_config(options->config, is_cname);
cos_str_set(&options->config->endpoint, TEST_COS_ENDPOINT);
cos_str_set(&options->config->access_key_id, TEST_ACCESS_KEY_ID);
cos_str_set(&options->config->access_key_secret, TEST_ACCESS_KEY_SECRET);
cos_str_set(&options->config->appid, TEST_APPID);
options->config->is_cname = is_cname;
options->ctl = cos_http_controller_create(options->pool, 0);
cos_str_set(&bucket, TEST_BUCKET_NAME);

//删除跨域配置
s = cos_delete_bucket_cors(options, &bucket, &resp_headers);
if (cos_status_is_ok(s)) {
        printf("delete bucket cors succeeded\n");
} else {
        printf("delete bucket cors failed\n");
}

//销毁内存池
cos_pool_destroy(p); 

版本控制

设置版本控制

功能说明

设置指定存储桶的版本控制功能。

方法原型

cos_status_t *cos_put_bucket_versioning(const cos_request_options_t *options,
                                        const cos_string_t *bucket, 
                                        cos_versioning_content_t *versioning, 
                                        cos_table_t **resp_headers);

参数说明

参数名称参数描述类型
optionsCOS 请求选项Struct
bucket存储桶名称,存储桶的命名格式为 BucketName-APPID,此处填写的存储桶名称必须为此格式String
versioning版本控制请求操作参数Struct
status版本是否开启,枚举值:Suspended,EnabledString
resp_headers返回 HTTP 响应消息的头域Struct

返回结果说明

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

示例

开启版本控制

cos_pool_t *p = NULL;
int is_cname = 0;
cos_status_t *s = NULL;
cos_request_options_t *options = NULL;
cos_string_t bucket;
cos_table_t *resp_headers = NULL;

//创建内存池
cos_pool_create(&p, NULL);

//初始化请求选项
options = cos_request_options_create(p);
options->config = cos_config_create(options->pool);
init_test_config(options->config, is_cname);
cos_str_set(&options->config->endpoint, TEST_COS_ENDPOINT);
cos_str_set(&options->config->access_key_id, TEST_ACCESS_KEY_ID);
cos_str_set(&options->config->access_key_secret, TEST_ACCESS_KEY_SECRET);
cos_str_set(&options->config->appid, TEST_APPID);
options->config->is_cname = is_cname;
options->ctl = cos_http_controller_create(options->pool, 0);
cos_str_set(&bucket, TEST_BUCKET_NAME);

//put bucket versioning
cos_versioning_content_t *versioning = NULL;
versioning = cos_create_versioning_content(p);
cos_str_set(&versioning->status, "Enabled");
s = cos_put_bucket_versioning(options, &bucket, versioning, &resp_headers);
if (cos_status_is_ok(s)) {
        printf("put bucket versioning succeeded\n");
} else {
        printf("put bucket versioning failed\n");
}

//销毁内存池
cos_pool_destroy(p); 

暂停版本控制

cos_pool_t *p = NULL;
int is_cname = 0;
cos_status_t *s = NULL;
cos_request_options_t *options = NULL;
cos_string_t bucket;
cos_table_t *resp_headers = NULL;

//创建内存池
cos_pool_create(&p, NULL);

//初始化请求选项
options = cos_request_options_create(p);
options->config = cos_config_create(options->pool);
init_test_config(options->config, is_cname);
cos_str_set(&options->config->endpoint, TEST_COS_ENDPOINT);
cos_str_set(&options->config->access_key_id, TEST_ACCESS_KEY_ID);
cos_str_set(&options->config->access_key_secret, TEST_ACCESS_KEY_SECRET);
cos_str_set(&options->config->appid, TEST_APPID);
options->config->is_cname = is_cname;
options->ctl = cos_http_controller_create(options->pool, 0);
cos_str_set(&bucket, TEST_BUCKET_NAME);

//put bucket versioning
cos_versioning_content_t *versioning = NULL;
versioning = cos_create_versioning_content(p);
cos_str_set(&versioning->status, "Suspended");
s = cos_put_bucket_versioning(options, &bucket, versioning, &resp_headers);
if (cos_status_is_ok(s)) {
        printf("put bucket versioning succeeded\n");
} else {
        printf("put bucket versioning failed\n");
}

//销毁内存池
cos_pool_destroy(p); 

查询版本控制

功能说明

查询指定存储桶的版本控制信息。

方法原型

cos_status_t *cos_get_bucket_versioning(const cos_request_options_t *options,
                                        const cos_string_t *bucket, 
                                        cos_versioning_content_t *versioning, 
                                        cos_table_t **resp_headers);

参数说明

参数名称参数描述类型
optionsCOS 请求选项Struct
bucket存储桶名称,存储桶的命名格式为 BucketName-APPID,此处填写的存储桶名称必须为此格式String
versioning版本控制请求操作参数Struct
status版本是否开启,枚举值:Suspended,EnabledString
resp_headers返回 HTTP 响应消息的头域Struct

返回结果说明

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

示例

cos_pool_t *p = NULL;
int is_cname = 0;
cos_status_t *s = NULL;
cos_request_options_t *options = NULL;
cos_string_t bucket;
cos_table_t *resp_headers = NULL;

//创建内存池
cos_pool_create(&p, NULL);

//初始化请求选项
options = cos_request_options_create(p);
options->config = cos_config_create(options->pool);
init_test_config(options->config, is_cname);
cos_str_set(&options->config->endpoint, TEST_COS_ENDPOINT);
cos_str_set(&options->config->access_key_id, TEST_ACCESS_KEY_ID);
cos_str_set(&options->config->access_key_secret, TEST_ACCESS_KEY_SECRET);
cos_str_set(&options->config->appid, TEST_APPID);
options->config->is_cname = is_cname;
options->ctl = cos_http_controller_create(options->pool, 0);
cos_str_set(&bucket, TEST_BUCKET_NAME);

//get bucket versioning
cos_versioning_content_t *versioning = NULL;
versioning = cos_create_versioning_content(p);
s = cos_get_bucket_versioning(options, &bucket, versioning, &resp_headers);
if (cos_status_is_ok(s)) {
        printf("put bucket versioning succeeded\n");
        printf("bucket versioning status: %s\n", versioning->status.data);
} else {
        printf("put bucket versioning failed\n");
}

//销毁内存池
cos_pool_destroy(p); 

跨地域复制

设置跨地域复制

功能说明

设置指定存储桶的跨地域复制规则。

方法原型

cos_status_t *cos_put_bucket_replication(const cos_request_options_t *options,
                                         const cos_string_t *bucket, 
                                         cos_replication_params_t *replication_param, 
                                         cos_table_t **resp_headers);

参数说明

参数名称参数描述类型
optionsCOS 请求选项。Struct
bucket存储桶名称,存储桶的命名格式为 BucketName-APPID,此处填写的存储桶名称必须为此格式String
replication_param跨地域复制请求操作参数Struct
role操作者账户信息String
rule_list跨地域复制规则配置信息Struct
id用来标注具体规则的名称String
status标识规则是否生效,枚举值:Enabled,DisabledString
prefix匹配前缀。不可重叠,重叠返回错误String
dst_bucket目的存储桶标识,格式为:资源标识符`qcs::cos:[region]::[bucketname-AppId]`String
resp_headers返回 HTTP 响应消息的头域Struct

返回结果说明

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

示例

cos_pool_t *p = NULL;
int is_cname = 0;
cos_status_t *s = NULL;
cos_request_options_t *options = NULL;
cos_string_t bucket;
cos_table_t *resp_headers = NULL;

//创建内存池
cos_pool_create(&p, NULL);

//初始化请求选项
options = cos_request_options_create(p);
options->config = cos_config_create(options->pool);
init_test_config(options->config, is_cname);
cos_str_set(&options->config->endpoint, TEST_COS_ENDPOINT);
cos_str_set(&options->config->access_key_id, TEST_ACCESS_KEY_ID);
cos_str_set(&options->config->access_key_secret, TEST_ACCESS_KEY_SECRET);
cos_str_set(&options->config->appid, TEST_APPID);
options->config->is_cname = is_cname;
options->ctl = cos_http_controller_create(options->pool, 0);
cos_str_set(&bucket, TEST_BUCKET_NAME);

//设置跨地域复制规则
cos_replication_params_t *replication_param = NULL;
replication_param = cos_create_replication_params(p);
cos_str_set(&replication_param->role, "qcs::cam::uin/100000616666:uin/100000616666");

cos_replication_rule_content_t *rule = NULL;
rule = cos_create_replication_rule_content(p);
cos_str_set(&rule->id, "Rule_01");
cos_str_set(&rule->status, "Enabled");
cos_str_set(&rule->prefix, "test1");
cos_str_set(&rule->dst_bucket, "qcs::cos:ap-shanghai::replicationtest-1253686666");
cos_list_add_tail(&rule->node, &replication_param->rule_list);

rule = cos_create_replication_rule_content(p);
cos_str_set(&rule->id, "Rule_02");
cos_str_set(&rule->status, "Disabled");
cos_str_set(&rule->prefix, "test2");
cos_str_set(&rule->dst_bucket, "qcs::cos:ap-shanghai::replicationtest-1253686666");
cos_list_add_tail(&rule->node, &replication_param->rule_list);

rule = cos_create_replication_rule_content(p);
cos_str_set(&rule->id, "Rule_03");
cos_str_set(&rule->status, "Enabled");
cos_str_set(&rule->prefix, "test3");
cos_str_set(&rule->dst_bucket, "qcs::cos:ap-shanghai::replicationtest-1253686666");
cos_list_add_tail(&rule->node, &replication_param->rule_list);

s = cos_put_bucket_replication(options, &bucket, replication_param, &resp_headers);
if (cos_status_is_ok(s)) {
        printf("put bucket replication succeeded\n");
} else {
        printf("put bucket replication failed\n");
}

//销毁内存池
cos_pool_destroy(p); 

查询跨地域复制

功能说明

查询指定存储桶的跨地域复制规则。

方法原型

cos_status_t *cos_get_bucket_replication(const cos_request_options_t *options,
                                         const cos_string_t *bucket, 
                                         cos_replication_params_t *replication_param, 
                                         cos_table_t **resp_headers);

参数说明

参数名称参数描述类型
optionsCOS 请求选项Struct
bucket存储桶名称,存储桶的命名格式为 BucketName-APPID,此处填写的存储桶名称必须为此格式String
replication_param跨地域复制请求操作参数Struct
role操作者账户信息String
rule_list跨地域复制规则配置信息Struct
id用来标注具体规则的名称String
status标识规则是否生效,枚举值:Enabled,DisabledString
prefix匹配前缀。不可重叠,重叠返回错误String
dst_bucket目的存储桶标识,格式为:资源标识符`qcs::cos:[region]::[bucketname-AppId]`String
resp_headers返回 HTTP 响应消息的头域Struct

返回结果说明

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

示例

cos_pool_t *p = NULL;
int is_cname = 0;
cos_status_t *s = NULL;
cos_request_options_t *options = NULL;
cos_string_t bucket;
cos_table_t *resp_headers = NULL;

//创建内存池
cos_pool_create(&p, NULL);

//初始化请求选项
options = cos_request_options_create(p);
options->config = cos_config_create(options->pool);
init_test_config(options->config, is_cname);
cos_str_set(&options->config->endpoint, TEST_COS_ENDPOINT);
cos_str_set(&options->config->access_key_id, TEST_ACCESS_KEY_ID);
cos_str_set(&options->config->access_key_secret, TEST_ACCESS_KEY_SECRET);
cos_str_set(&options->config->appid, TEST_APPID);
options->config->is_cname = is_cname;
options->ctl = cos_http_controller_create(options->pool, 0);
cos_str_set(&bucket, TEST_BUCKET_NAME);

//查询跨地域复制规则
cos_replication_params_t *replication_param2 = NULL;
replication_param2 = cos_create_replication_params(p);
s = cos_get_bucket_replication(options, &bucket, replication_param2, &resp_headers);

if (cos_status_is_ok(s)) {
        printf("get bucket replication succeeded\n");
        printf("ReplicationConfiguration role: %s\n", replication_param2->role.data);
cos_replication_rule_content_t *content = NULL;
        cos_list_for_each_entry(cos_replication_rule_content_t, content, &replication_param2->rule_list, node) {
        printf("ReplicationConfiguration rule, id:%s, status:%s, prefix:%s, dst_bucket:%s, storage_class:%s\n",
                        content->id.data, content->status.data, content->prefix.data, content->dst_bucket.data, content->storage_class.data);
        }
} else {
        printf("get bucket replication failed\n");
}

//销毁内存池
cos_pool_destroy(p); 

删除跨地域复制

功能说明

删除指定存储桶的跨地域复制规则。

方法原型

cos_status_t *cos_delete_bucket_replication(const cos_request_options_t *options,
                                            const cos_string_t *bucket, 
                                            cos_table_t **resp_headers);

参数说明

参数名称参数描述类型
optionsCOS 请求选项Struct
bucket存储桶名称,存储桶的命名格式为 BucketName-APPID,此处填写的存储桶名称必须为此格式String
resp_headers返回 HTTP 响应消息的头域Struct

返回结果说明

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

示例

cos_pool_t *p = NULL;
int is_cname = 0;
cos_status_t *s = NULL;
cos_request_options_t *options = NULL;
cos_string_t bucket;
cos_table_t *resp_headers = NULL;

//创建内存池
cos_pool_create(&p, NULL);

//初始化请求选项
options = cos_request_options_create(p);
options->config = cos_config_create(options->pool);
init_test_config(options->config, is_cname);
cos_str_set(&options->config->endpoint, TEST_COS_ENDPOINT);
cos_str_set(&options->config->access_key_id, TEST_ACCESS_KEY_ID);
cos_str_set(&options->config->access_key_secret, TEST_ACCESS_KEY_SECRET);
cos_str_set(&options->config->appid, TEST_APPID);
options->config->is_cname = is_cname;
options->ctl = cos_http_controller_create(options->pool, 0);
cos_str_set(&bucket, TEST_BUCKET_NAME);

//删除跨地域复制规则
s = cos_delete_bucket_replication(options, &bucket, &resp_headers);
if (cos_status_is_ok(s)) {
        printf("delete bucket replication succeeded\n");
} else {
        printf("delete bucket replication failed\n");
}

//销毁内存池
cos_pool_destroy(p); 

预签名 URL

简介

C SDK 提供获取请求预签名 URL 接口,详细操作请查看本文说明和示例。

获取请求预签名 URL

生成请求预签名URL

功能说明

该接口用于生成请求预签名 URL。

方法原型

int cos_gen_presigned_url(const cos_request_options_t *options,
                          const cos_string_t *bucket, 
                          const cos_string_t *object,
                          const int64_t expire,
                          http_method_e method,
                          cos_string_t *presigned_url);

参数说明

参数名称参数描述类型
optionsCOS 请求选项Struct
bucket存储桶名称,存储桶的命名格式为 BucketName-APPID ,此处填写的存储桶名称必须为此格式String
objectObject 名称String
expire签名有效时间,单位为秒Int
methodHTTP 请求方法枚举类型,分别为 HTTP_GET、HTTP_HEAD、HTTP_PUT、HTTP_POST、HTTP_DELETEEnum
presigned_url生成的请求预签名 URLString

返回结果说明

返回结果描述类型
code错误码Int

预签名请求示例

可在 options 参数中设置永久密钥或临时密钥来获取预签名 URL。

cos_pool_t *p = NULL;
int is_cname = 0;
cos_request_options_t *options = NULL;
cos_string_t bucket;
cos_string_t object;
cos_string_t presigned_url;

//create memory pool
cos_pool_create(&p, NULL);

//init request options
options = cos_request_options_create(p);
options->config = cos_config_create(options->pool);
init_test_config(options->config, is_cname);
cos_str_set(&options->config->endpoint, TEST_COS_ENDPOINT);
cos_str_set(&options->config->access_key_id, TEST_ACCESS_KEY_ID);
cos_str_set(&options->config->access_key_secret, TEST_ACCESS_KEY_SECRET);
/* 可以通过设置 sts_token 来使用临时密钥,当使用临时密钥时,access_key_id 和 access_key_secret 均需要设置为对应临时密钥所配套的 SecretId 和 SecretKey */
//cos_str_set(&options->config->sts_token, "MyTokenString");
cos_str_set(&options->config->appid, TEST_APPID);
options->config->is_cname = is_cname;
options->ctl = cos_http_controller_create(options->pool, 0);
cos_str_set(&bucket, TEST_BUCKET_NAME);
cos_str_set(&object, TEST_OBJECT_NAME);

//generate presigned URL
cos_gen_presigned_url(options, &bucket, &object, 300, HTTP_GET, &presigned_url);
printf("presigned url: %s\n", presigned_url.data);

//destroy memory pool
cos_pool_destroy(p); 

异常处理

简介

SDK 调用失败时,结果信息包含在 API 返回的 cos_status_t 结构中。

SDK 中使用每一个 API 的正确做法如下所示,为了简要,文档中范例不再给出具体异常的处理,仅给出 API 的使用范例。

cos_status_t *s = NULL;
s = cos_put_object_from_file(options, &bucket, &object, &file, &headers, &resp_headers);
if (!s && !cos_status_is_ok(s)) {
        // 按需要进行异常场景的日志输出和处理
        cos_warn_log("failed to put object from file", buf);
        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);
}

客户端异常

当 cos_status_t 结构中 code 成员值小于0时,表明发生 SDK 本地客户端错误,错误码信息参考枚举 cos_error_code_e 定义。

typedef enum {
        COSE_OK = 0,
        COSE_OUT_MEMORY = -1000,
        COSE_OVER_MEMORY = -999,
        COSE_FAILED_CONNECT = -998,
        COSE_ABORT_CALLBACK = -997,
        COSE_INTERNAL_ERROR = -996,
        COSE_REQUEST_TIMEOUT = -995,
        COSE_INVALID_ARGUMENT = -994,
        COSE_INVALID_OPERATION = -993,
        COSE_CONNECTION_FAILED = -992,
        COSE_FAILED_INITIALIZE = -991,
        COSE_NAME_LOOKUP_ERROR = -990,
        COSE_FAILED_VERIFICATION = -989,
        COSE_WRITE_BODY_ERROR = -988,
        COSE_READ_BODY_ERROR = -987,
        COSE_SERVICE_ERROR = -986,
        COSE_OPEN_FILE_ERROR = -985,
        COSE_FILE_SEEK_ERROR = -984,
        COSE_FILE_INFO_ERROR = -983,
        COSE_FILE_READ_ERROR = -982,
        COSE_FILE_WRITE_ERROR = -981,
        COSE_XML_PARSE_ERROR = -980,
        COSE_UTF8_ENCODE_ERROR = -979,
        COSE_CRC_INCONSISTENT_ERROR = -978,
        COSE_FILE_FLUSH_ERROR = -977,
        COSE_FILE_TRUNC_ERROR = -976,
        COSE_UNKNOWN_ERROR = -100
} cos_error_code_e;

服务端异常

当 cos_status_t 结构中 code 成员值大于0时,表明发生网络侧错误。

以下是 cos_status_t 结构的描述:

cos_status_t 成员描述类型
coderesponse 的 status 状态码, 4xx 是指请求因客户端而失败, 5xx 是服务端异常导致的失败,详情请参阅 [错误码] 文档Int
error_code请求失败时 body 返回的 Error Code,详情请参阅 [错误码] 文档String
error_msg请求失败时 body 返回的 Error Message,详情请参阅 [错误码] 文档String
req_id请求 ID,用于标识用户唯一请求String