在这一章里,您将学到如何用OSS C SDK完成一些基本的操作。
Step-1.初始化OSS C SDK运行环境
OSS C SDK使用时首先需要初始化运行环境,使用结束前需要清理运行环境,下面代码演示初始化OSS C SDK运行环境:int main(int argc, char *argv[]){/* 程序入口处调用aos_http_io_initialize方法,这个方法内部会做一些全局资源的初始化,涉及网络,内存等部分 */if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {exit(1);}/* 调用OSS SDK的接口上传或下载文件 *//* ... 用户逻辑代码,这里省略 *//* 程序结束前,调用aos_http_io_deinitialize方法释放之前分配的全局资源 */aos_http_io_deinitialize();return 0;}
[backcolor=transparent]注:
- aos_http_io_initialize初始化OSS C SDK运行环境,第一个参数可以用于个性化设置user agent的内容,用作后续统计。
- aos_http_io_deinitialize清理OSS C SDK运行环境。
int main(int argc, char *argv[])
{
/* 程序入口处调用aos_http_io_initialize方法,这个方法内部会做一些全局资源的初始化,涉及网络,内存等部分 */
if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
exit(1);
}
/* 调用OSS SDK的接口上传或下载文件 */
/* ... 用户逻辑代码,这里省略 */
/* 程序结束前,调用aos_http_io_deinitialize方法释放之前分配的全局资源 */
aos_http_io_deinitialize();
return 0;
}
/* 等价于apr_pool_t,用于内存管理的内存池,实现代码在apr库中 */
aos_pool_t *pool;
oss_request_options_t *options;
/* 重新创建一个新的内存池,第二个参数是NULL,表示没有继承自其它内存池 */
aos_pool_create(&pool, NULL);
/* 创建并初始化options,这个参数内部主要包括endpoint,access_key_id,acces_key_secret,is_cname, curl参数等全局配置信息
* options的内存是由pool分配的,后续释放掉pool后,options的内存也相当于释放掉了,不再需要单独释放内存
*/
options = oss_request_options_create(pool);
options->config = oss_config_create(options->pool);
/* aos_str_set是用char*类型的字符串初始化aos_string_t类型*/
aos_str_set(&options->config->endpoint, "<您的Endpoint>");
aos_str_set(&options->config->access_key_id, "<您的AccessKeyId>");
aos_str_set(&options->config->access_key_secret, "<您的AccessKeySecret>");
/* 是否使用了CNAME */
options->config->is_cname = 0;
/* 用于设置网络相关参数,比如超时时间等*/
options->ctl = aos_http_controller_create(options->pool, 0);
[backcolor=transparent]注:
- Bucket的命名规范请查看OSS 基本概念
- Bucket名字不能与OSS服务中其他用户已有的存储空间重复,所以你需要选择一个独特的存储空间名字以避免创建失败
- oss_create_bucket的返回值是aos_status_t类型,包括了code(http code),error_code,error_msg和req_id,req_id可以协助调查问题。其他接口,如果没有特殊说明外,也都是返回aos_status_t类型。
aos_pool_t *p;
oss_request_options_t *options;
aos_status_t *s;
aos_table_t *resp_headers;
oss_acl_e oss_acl = OSS_ACL_PRIVATE;
char *bucket_name = "<您的bucket名字>";
aos_string_t bucket;
aos_pool_create(&p, NULL);
options = oss_request_options_create(p);
init_options(options);
/* 将char*类型数据赋值给aos_string_t类型的bucket */
aos_str_set(&bucket, bucket_name);
s = oss_create_bucket(options, &bucket, oss_acl, &resp_headers);
/* 判断请求是否成功 */
if (aos_status_is_ok(s)) {
printf("create bucket succeeded\n");
} else {
printf("create bucket failed\n");
}
/* 执行完一个请求后,释放掉这个内存池,结果就是会释放掉这个请求过程中各个部分分配的内存 */
aos_pool_destroy(p);
[backcolor=transparent]注:
- 关于上传文件更详细的信息,参见上传文件。
aos_pool_t *p;
oss_request_options_t *options;
aos_status_t *s;
aos_table_t *resp_headers;
char *bucket_name = "<您的bucket名字>";
aos_string_t bucket;
oss_list_object_params_t *params;
oss_list_object_content_t *content;
int max_ret = 1000;
char *key;
aos_pool_create(&p, NULL);
/* 创建并初始化options */
options = oss_request_options_create(p);
init_options(options);
/* 初始化参数 */
aos_str_set(&bucket, bucket_name);
params = oss_create_list_object_params(p);
params->max_ret = max_ret;
aos_str_set(¶ms->prefix, "<prefix>");
aos_str_set(¶ms->delimiter, "<delimiter>");
aos_str_set(¶ms->marker, "<marker>");
s = oss_list_object(options, &bucket, params, &resp_headers);
/* 判断请求是否成功 */
if (aos_status_is_ok(s)) {
printf("list file succeeded\n");
} else {
printf("list file failed\n");
}
/* 获取每个文件的名称 */
aos_list_for_each_entry(content, ¶ms->object_list, node) {
key = apr_psprintf(p, "%.*s", content->key.len, content->key.data);
}
/* 释放资源 */
aos_pool_destroy(p);
[backcolor=transparent]注:
- 更多灵活的参数配置,可以参考管理文件
aos_pool_t *p;
oss_request_options_t *options;
aos_status_t *s;
aos_table_t *headers;
aos_table_t *resp_headers;
char *bucket_name = "<您的bucket名字>";
char *object_name = "<您的object名字>";
aos_string_t bucket;
aos_string_t object;
aos_list_t buffer;
aos_buf_t *content;
char *buf;
int64_t len = 0;
int64_t size = 0;
int64_t pos = 0;
aos_pool_create(&p, NULL);
/* 创建并初始化options */
options = oss_request_options_create(p);
init_options(options);
/* 初始化参数 */
aos_str_set(&object, object_name);
aos_str_set(&bucket, bucket_name);
headers = aos_table_make(p, 1);
/* 下载文件到buffer中 */
aos_list_init(&buffer);
s = oss_get_object_to_buffer(options, &bucket, &object, headers, &buffer, &resp_headers);
/* 判断请求是否成功 */
if (aos_status_is_ok(s)) {
printf("get file succeeded\n");
} else {
printf("get file failed\n");
}
/* 从buffer中将aos_list_t类型的数据转为char*类型的,并计算读到的文件总长度 */
len = aos_buf_list_len(&buffer);
buf = aos_pcalloc(p, len + 1);
buf[len] = '\0';
aos_list_for_each_entry(content, &buffer, node) {
size = aos_buf_size(content);
memcpy(buf + pos, content->pos, size);
pos += size;
}
/* 释放资源 */
aos_pool_destroy(p);
[backcolor=transparent]注:
- 关于下载文件更详细的信息,参见下载文件
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。