オブジェクトメタには、HTTP ヘッダーとユーザー定義のオブジェクトメタが含まれます。 詳しくは、「OSS 開発者ガイド」の「オブジェクトメタ」をご参照ください。
オブジェクトメタの取得
OSS にファイルをアップロードした後、または OSS からオブジェクトを読み取る前に、oss_get_object_meta
インターフェイスを使用して、長さやタイプなど、オブジェクトに関するメタ情報を取得します。 次のコードを実行して、オブジェクトメタを設定および取得します。
#include "oss_api.h"
#include "aos_http_io.h"
const char *endpoint = "<yourEndpoint>";
const char *access_key_id = "<yourAccessKeyId>";
const char *access_key_secret = "<yourAccessKeySecret>";
const char *bucket_name = "<yourBucketName>";
const char *object_name = "<yourObjectName>";
void init_options(oss_request_options_t *options)
{
options->config = oss_config_create(options->pool);
/* Use a char* string to initialize aos_string_t. */
aos_str_set(&options->config->endpoint, endpoint);
aos_str_set(&options->config->access_key_id, access_key_id);
aos_str_set(&options->config->access_key_secret, access_key_secret);
/* Determine whether the CNAME is used. The value 0 indicates that the CNAME is not used. */
options->config->is_cname = 0;
/* Configure network parameters, such as timeout. */
options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
/* Call the aos_http_io_initialize method in main() to initialize global resources, such as networks and memories. */
if (aos_http_io_initialize(NULL, 0) ! = AOSE_OK) {
exit(1);
}
/* Memory pool used to manage memories, equivalent to apr_pool_t. The implementation code is included in the apr library. */
aos_pool_t *pool;
/* Re-create a memory pool. The second parameter is NULL, indicating that the new pool does not inherit any other memory pool. */
aos_pool_create(&pool, NULL);
/* Create and initialize options. This parameter includes global configuration information, such as endpoint, access_key_id, acces_key_secret, is_cname, and curl. */
oss_request_options_t *oss_client_options;
/* Allocate the memories in the memory pool to options. */
oss_client_options = oss_request_options_create(pool);
/* Initialize oss_client_options. */
init_options(oss_client_options);
/* Initialize parameters. */
aos_string_t bucket;
aos_string_t object;
aos_table_t *headers;
aos_list_t buffer;
aos_table_t *resp_headers = NULL;
aos_status_t *resp_status = NULL;
aos_buf_t *content = NULL;
char *content_length_str = NULL;
char *object_type = NULL;
char *object_author = NULL;
int64_t content_length = 0;
aos_str_set(&bucket, bucket_name);
aos_str_set(&object, object_name);
headers = aos_table_make(pool, 2);
// Configure custom Object Meta. */
apr_table_set(headers, "Expires", "Fri, 28 Feb 2032 05:38:42 GMT");
apr_table_set(headers, "x-oss-meta-author", "oss");
aos_list_init(&buffer);
content = aos_buf_pack(oss_client_options->pool, object_content, strlen(object_content));
aos_list_add_tail(&content->node, &buffer);
/* Set object permissions and upload the object from the cache. */
resp_status = oss_put_object_from_buffer(oss_client_options, &bucket, &object,
&buffer, headers, &resp_headers);
if (aos_status_is_ok(resp_status)) {
printf("put object from buffer with md5 succeeded\n");
} else {
printf("put object from buffer with md5 failed\n");
}
/* Obtain the object permission. */
resp_status = oss_get_object_meta(oss_client_options, &bucket, &object, &resp_headers);
if (aos_status_is_ok(resp_status)) {
content_length_str = (char*)apr_table_get(resp_headers, OSS_CONTENT_LENGTH);
if (content_length_str ! = NULL) {
content_length = atol(content_length_str);
}
object_author = (char*)apr_table_get(resp_headers, OSS_AUTHORIZATION);
object_type = (char*)apr_table_get(resp_headers, OSS_OBJECT_TYPE);
printf("get object meta succeeded, object author:%s, object type:%s, content_length:%ld\n", object_author, object_type, content_length);
} else {
printf("req:%s, get object meta failed\n", resp_status->req_id);
}
/* Release the memory pool, that is, the memories allocated to resources during the request. */
aos_pool_destroy(pool);
/* Release the allocated global resources. */
aos_http_io_deinitialize();
return 0;
}
注 HTTP ヘッダーの詳細については、「RFC2616」をご参照ください。