设置User Meta
OSS支持用户自定义Meta信息对文件进行描述。比如:
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;
char *data = "<object content>";
aos_list_t buffer;
aos_buf_t *content;
aos_pool_create(&p, NULL);
options = oss_request_options_create(p);
init_options(options);
aos_str_set(&bucket, bucket_name);
aos_str_set(&object, object_name);
headers = aos_table_make(p, 1);
/* 设置用户自定义meta */
apr_table_set(headers, "x-oss-meta-author", "oss");
/* 上传数据到OSS中 */
aos_list_init(&buffer);
content = aos_buf_pack(options->pool, data, strlen(data));
aos_list_add_tail(&content->node, &buffer);
s = oss_put_object_from_buffer(options, &bucket, &object, &buffer, headers, &resp_headers);
if (aos_status_is_ok(s)) {
printf("put object succeeded\n");
} else {
printf("put object failed\n");
}
aos_pool_destroy(p);
[backcolor=transparent]注:
- 因为文件元信息在上传/下载时是附在HTTP Headers中, HTTP协议规定不能包含复杂字符。
- 一个文件可以有多个类似的参数,但所有的user meta总大小不能超过8KB。
void head_object()
{
aos_pool_t *p = NULL;
aos_string_t bucket;
aos_string_t object;
oss_request_options_t *options = NULL;
aos_table_t *headers = NULL;
aos_table_t *resp_headers = NULL;
aos_status_t *s = NULL;
char *content_length_str = NULL;
char *object_type = NULL;
int64_t content_length = 0;
aos_pool_create(&p, NULL);
/* 创建并初始化options */
options = oss_request_options_create(p);
init_options(options);
/* 初始化参数 */
aos_str_set(&bucket, "<您的bucket名字>");
aos_str_set(&object, "<您的object名字>");
headers = aos_table_make(p, 0);
/* 获取文件元数据 */
s = oss_head_object(options, &bucket, &object, headers, &resp_headers);
if (aos_status_is_ok(s)) {
/* 获取文件长度 */
content_length_str = (char*)apr_table_get(resp_headers, OSS_CONTENT_LENGTH);
if (content_length_str != NULL) {
content_length = atoll(content_length_str);
}
/* 获取文件的类型 */
object_type = (char*)apr_table_get(resp_headers, OSS_OBJECT_TYPE);
printf("head object succeeded, object type:%s, content_length:%ld\n",
object_type, content_length);
} else {
printf("head object failed\n");
}
aos_pool_destroy(p);
}
[backcolor=transparent]注:
- oss_head_object接口不会去下载文件内容,只会读取文件的元数据,包括系统级别和用户自定义的元数据
- 完整代码参考:GitHub
aos_pool_t *p;
oss_request_options_t *options;
aos_status_t *s;
aos_table_t * headers;
aos_table_t *resp_headers;
char *source_bucket_name = "<您的源bucket名字>";
char *source_object_name = "<您的源object名字>";
char *dest_bucket_name = "<您的目的bucket名字>";
char *dest_object_name = "<您的目的object名字>";
aos_string_t source_bucket;
aos_string_t source_object;
aos_string_t dest_bucket;
aos_string_t dest_object;
aos_pool_create(&p, NULL);
options = oss_request_options_create(p);
init_options(options);
aos_str_set(&source_bucket, source_bucket_name);
aos_str_set(&source_object, source_object_name);
aos_str_set(&dest_bucket, dest_bucket_name);
aos_str_set(&dest_object, dest_object_name);
headers = aos_table_make(p, 0);
/* 拷贝文件 */
s = oss_copy_object(options, &source_bucket, &source_object, &dest_bucket, &dest_object, headers, &resp_headers);
if (aos_status_is_ok(s)) {
printf("copy object succeeded\n");
} else {
printf("copy object failed\n");
}
aos_pool_destroy(p);
[backcolor=transparent]注:
- 需要注意的是源bucket与目的bucket必须属于同一region。
- 如果拷贝文件超过1G,建议使用分片拷贝文件方式进行拷贝。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。