快速入门

最近更新时间: 2024-06-12 15:06:00

下载与安装

相关资源

环境依赖

依赖库: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 - 1.6.5 版本),单击 这里 下载,安装方式如下:

    ./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

术语解释

名称 描述
APPID 开发者访问 COS 服务时拥有的用户维度唯一资源标识,用以标识资源
SecretId 开发者拥有的项目身份识别 ID,用以身份认证
SecretKey 开发者拥有的项目身份密钥
Bucket COS 中用于存储数据的容器
Object COS 中存储的具体文件,是存储的基本实体
Region 域名中的地域信息
Endpoint Endpoint 由 Region 和域名组成,具体格式为: ".",其中 Domain 为自定义的域名。
在控制台创建 Bucket 时,可以看到对应的访问地址为:".",Bucket 后面的部分即为 Endpoint。
ACL 访问控制列表(Access Control List),是指特定 Bucket 或 Object 的访问控制信息列表
CORS 跨域资源共享(Cross-Origin Resource Sharing), 指发起请求的资源所在域不同于该请求所指向资源所在的域的 HTTP 请求
Multipart Uploads 分块上传,COS 服务为上传文件提供的一种分块上传模式

开始使用

下面为您介绍使用 XML C SDK 的一般流程。

  1. 初始化 SDK。

  2. 设置请求选项参数。

  3. 设置 API 接口必需的参数。

  4. 调用 SDK API 发起请求并获得请求响应结果。

初始化

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

/* 用于设置网络相关参数,比如超时时间等*/
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);