tencent cloud

数据万象

动态与公告
产品动态
产品公告
产品简介
产品概述
产品优势
应用场景
功能概览
地域与域名
使用限制
产品计费
计费概述
计费方式
计费项
免费额度
欠费说明
查看消费明细
常见问题
快速入门
注册与登录
绑定存储桶
上传和处理文件
下载和删除文件
解绑存储桶
通过 COS 使用数据万象
能力地图
图片处理
媒体处理
内容审核
AI 内容识别
文档处理
智能语音
文件处理
用户指南
概览
存储桶管理
智能工具箱
任务与工作流
数据监控
用量统计
实践教程
版权保护解决方案
图片处理实践
API 授权策略使用指引
工作流实践
API 文档
API 概览
结构体
公共请求头部
公共响应头部
开通万象服务
图片处理
AI 内容识别
智能语音
媒体处理
内容审核
文档处理
文件处理
任务与工作流
云查毒
错误码
请求签名
SDK 文档
SDK 概览
图片处理 Android SDK
图片处理 iOS SDK
COS Android SDK
C SDK
C++ SDK
.NET(C#) SDK
Go SDK
COS iOS SDK
Java SDK
JavaScript SDK
Node.js SDK
PHP SDK
Python SDK
小程序 SDK
SDK 产品个人信息保护规则
安全与合规
权限管理
常见问题
基础设置
文档处理
媒体处理
内容识别
智能语音
服务协议
Service Level Agreement
联系我们
词汇表

快速入门

PDF
聚焦模式
字号
最后更新时间: 2025-11-19 14:28:57

下载与安装

相关资源

对象存储的 XML C SDK 源码下载地址:XML C SDK
演示示例 Demo 下载地址:XML C SDK Demo
SDK 更新日志请参见 ChangeLog
SDK 常见问题请参见:C SDK 常见问题
说明
如果您在使用 SDK 时遇到函数或方法不存在等错误,请先将 SDK 升级到最新版再重试。

环境依赖

依赖库:libcurl apr apr-util minixml。

安装 SDK

1. 安装 CMake 工具(建议 2.6.0 及以上版本),单击 这里 下载,安装方式如下:
./configure
make
make install
2. 安装 libcurl(建议 7.32.0 及以上版本),单击 这里 下载,安装方式如下:
./configure
make
make install
3. 安装 apr(建议 1.5.2 及以上版本),单击 这里 下载,安装方式如下:
./configure
make
make install
4. 安装 apr-util(建议 1.5.4 及以上版本),单击 这里 下载,安装时需要指定--with-apr选项,安装方式如下:
./configure --with-apr=/your/apr/install/path
make
make install
5. 安装 minixml(建议 2.8 - 2.12 版本),单击 这里 下载,安装方式如下:
./configure
make
make install
6. 编译 COS C SDK。下载 XML C SDK 源码,执行如下编译命令:
cmake .
make
make install

开始使用

下面为您介绍使用 XML C SDK 的一般流程。
1. 初始化 SDK。
2. 设置请求选项参数。关于 APPID、SecretId、SecretKey、Bucket 等名称的含义和获取方式请参见 COS 术语信息
APPID 是申请腾讯云账号后,系统分配的账户标识之一。
access_key_id 与 access_key_secret 是账号 API 密钥。
endpoint 是 COS 访问域名信息,详情请参见 地域和访问域名 文档。例如,广州地域 endpoint 为cos.ap-guangzhou.myqcloud.com,全球加速域名的 endpoint 为 cos.accelerate.myqcloud.com。endpoint可以加上http或者https,SDK 默认通过 http 访问 COS,如通过 https 访问广州地域的 endpoint 为 https://cos.ap-guangzhou.myqcloud.com
is_cname 表示 endpoint 是否为自定义域名,如果is_cname设置成1,则 endpoint 表示自定义域名。
3. 设置 API 接口必需的参数。
4. 调用 SDK API 发起请求并获得请求响应结果。

初始化

注意
建议用户 使用临时密钥 调用 SDK,通过临时授权的方式进一步提高 SDK 使用的安全性。申请临时密钥时,请遵循 最小权限指引原则,防止泄漏目标存储桶或对象之外的资源。
如果您一定要使用永久密钥,建议遵循 最小权限指引原则 对永久密钥的权限范围进行限制。
int main(int argc, char *argv[])
{
/* 程序入口处调用 cos_http_io_initialize 方法,这个方法内部会做一些全局资源的初始化,涉及网络,内存等部分 */
if (cos_http_io_initialize(NULL, 0) != COSE_OK) {
exit(1);
}

/* 调用 COS SDK 的接口上传或下载文件 */
/* ... 用户逻辑代码,这里省略 */

/* 程序结束前,调用 cos_http_io_deinitialize 方法释放之前分配的全局资源 */
cos_http_io_deinitialize();
return 0;
}

初始化请求选项

/* 等价于 apr_pool_t,用于内存管理的内存池,实现代码在 apr 库中 */
cos_pool_t *pool;
cos_request_options_t *options;

/* 重新创建一个新的内存池,第二个参数是 NULL,表示没有继承自其它内存池 */
cos_pool_create(&pool, NULL);

/* 创建并初始化 options,这个参数内部主要包括 endpoint,access_key_id,acces_key_secret,is_cname, curl参数等全局配置信息
* options的内存是由pool分配的,后续释放掉pool后,options的内存也相当于释放掉了,不再需要单独释放内存
*/
options = cos_request_options_create(pool);
options->config = cos_config_create(options->pool);

/* cos_str_set 是用 char* 类型的字符串初始化 cos_string_t 类型*/
cos_str_set(&options->config->endpoint, "<用户的Endpoint>"); //Endpoint 依据用户所在地域的 COS 服务域名填写
cos_str_set(&options->config->access_key_id, "<用户的SecretId>"); //用户注册 COS 服务后所获得的 SecretId
cos_str_set(&options->config->access_key_secret, "<用户的SecretKey>"); //用户注册 COS 服务后所获得的 SecretKey
cos_str_set(&options->config->sts_token, "<用户的StsToken>"); //临时密钥的 Token,临时密钥生成和使用指引参见https://www.tencentcloud.com/document/product/436/14048
cos_str_set(&options->config->appid, "<用户的AppId>"); //用户注册 COS 服务后所获得的 AppId

/* 可以通过设置 sts_token 来使用临时密钥,当使用临时密钥时,access_key_id 和access_key_secret 均需要设置为对应临时密钥所配套的 SecretId 和 SecretKey */
//cos_str_set(&options->config->sts_token, "MyTokenString");
/* 是否使用了 CNAME */
options->config->is_cname = 0;
/* 使用自定义域名访问 COS */
/*
options->config->is_cname = 1;
cos_str_set(&options->config->endpoint, "<自定义域名>");
*/

/* 用于设置网络相关参数,例如超时时间等*/
options->ctl = cos_http_controller_create(options->pool, 0);

/* 用于设置上传请求是否自动添加 Content-MD5 头部,enable 为 COS_FALSE 时上传请求将不自动添加 Content-MD5 头部,enable 为 COS_TRUE 时上传请求将自动添加Content-MD5 头部,如果不设置此项则默认将添加 Content-MD5 头部 */
cos_set_content_md5_enable(options->ctl, COS_FALSE);

/* 用于设置请求路由地址和端口,一般情况下无需设置此参数,请求将按域名解析结果路由 */
//cos_set_request_route(options->ctl, "192.168.12.34", 80);
说明
临时密钥生成和使用可参见 临时密钥生成及使用指引

创建存储桶

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;

/* 重新创建一个新的内存池,第二个参数是 NULL,表示没有继承自其它内存池 */
cos_pool_create(&p, NULL);

/* 创建并初始化 options,这个参数内部主要包括endpoint,access_key_id,acces_key_secret,is_cname, curl参数等全局配置信息
* options 的内存是由 pool 分配的,后续释放掉 pool 后,options的内存也相当于释放掉了,不再需要单独释放内存
*/
options = cos_request_options_create(p);
options->config = cos_config_create(options->pool);
init_test_config(options->config, is_cname);

/* 设置 appid,endpoint,access_key_id,acces_key_secret,is_cname, curl参数等配置信息 */
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);
/* 存储桶的命名格式为 BucketName-APPID,此处填写的存储桶名称必须为此格式 */
cos_str_set(&bucket, TEST_BUCKET_NAME);

/* 调用 API 创建存储桶 */
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");
}

//destroy memory pool
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_list_object_params_t *list_params = NULL;
cos_string_t bucket;
cos_table_t *resp_headers = NULL;

/* 重新创建一个新的内存池,第二个参数是 NULL,表示没有继承自其它内存池 */
cos_pool_create(&p, NULL);

/* 创建并初始化 options,这个参数内部主要包括 endpoint,access_key_id,acces_key_secret,is_cname, curl参数等全局配置信息
* options的内存是由pool分配的,后续释放掉 pool 后,options 的内存也相当于释放掉了,不再需要单独释放内存
*/
options = cos_request_options_create(p);
options->config = cos_config_create(options->pool);
init_test_config(options->config, is_cname);

/* 设置 appid,endpoint,access_key_id,acces_key_secret,is_cname, curl 参数等配置信息 */
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);
/* 存储桶的命名格式为 BucketName-APPID,,此处填写的存储桶名称必须为此格式 */
cos_str_set(&bucket, TEST_BUCKET_NAME);

/* 调用 API 查询对象列表 */
list_params = cos_create_list_object_params(p);
cos_str_set(&list_params->encoding_type, "url");
s = cos_list_object(options, &bucket, list_params, &resp_headers);
if (cos_status_is_ok(s)) {
printf("list object succeeded\\n");
} else {
printf("list object failed\\n");
}

//destroy memory pool
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_string_t object;
cos_string_t file;
cos_table_t *resp_headers = NULL;

/* 重新创建一个新的内存池,第二个参数是 NULL,表示没有继承自其它内存池 */
cos_pool_create(&p, NULL);

/* 创建并初始化 options,这个参数内部主要包括 endpoint,access_key_id,acces_key_secret,is_cname, curl参数等全局配置信息
* options的内存是由pool分配的,后续释放掉pool后,options的内存也相当于释放掉了,不再需要单独释放内存
*/
options = cos_request_options_create(p);
options->config = cos_config_create(options->pool);
init_test_config(options->config, is_cname);

/* 设置 appid,endpoint,access_key_id,acces_key_secret,is_cname, curl 参数等配置信息 */
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);
/* 存储桶的命名格式为 BucketName-APPID,,此处填写的存储桶名称必须为此格式 */
cos_str_set(&bucket, TEST_BUCKET_NAME);

/* 调用 API 上传对象 */
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");
}

//destroy memory pool
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_string_t object;
cos_string_t file;
cos_table_t *resp_headers = NULL;

/* 重新创建一个新的内存池,第二个参数是 NULL,表示没有继承自其它内存池 */
cos_pool_create(&p, NULL);

/* 创建并初始化 options,这个参数内部主要包括 endpoint,access_key_id,acces_key_secret,is_cname, curl参数等全局配置信息
* options的内存是由pool分配的,后续释放掉pool后,options的内存也相当于释放掉了,不再需要单独释放内存
*/
options = cos_request_options_create(p);
options->config = cos_config_create(options->pool);
init_test_config(options->config, is_cname);

/* 设置 appid,endpoint,access_key_id,acces_key_secret,is_cname, curl 参数等配置信息 */
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);
/* 存储桶的命名格式为 BucketName-APPID,,此处填写的存储桶名称必须为此格式 */
cos_str_set(&bucket, TEST_BUCKET_NAME);

/* 调用 API 下载对象 */
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");
}

//destroy memory pool
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_string_t object;
cos_table_t *resp_headers = NULL;

/* 重新创建一个新的内存池,第二个参数是 NULL,表示没有继承自其它内存池 */
cos_pool_create(&p, NULL);

/* 创建并初始化 options,这个参数内部主要包括 endpoint,access_key_id,acces_key_secret,is_cname, curl 参数等全局配置信息
* options的内存是由pool分配的,后续释放掉 pool 后,options 的内存也相当于释放掉了,不再需要单独释放内存
*/
options = cos_request_options_create(p);
options->config = cos_config_create(options->pool);
init_test_config(options->config, is_cname);

/* 设置 appid,endpoint,access_key_id,acces_key_secret,is_cname, curl参数等配置信息 */
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);
/* 存储桶的命名格式为 BucketName-APPID,,此处填写的存储桶名称必须为此格式 */
cos_str_set(&bucket, TEST_BUCKET_NAME);

/* 调用 API 删除对象 */
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");
}

//destroy memory pool
cos_pool_destroy(p);


帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈