管理生命週期(Lifecycle)
OSS允許使用者對儲存空間設定生命週期規則,以自動淘汰過期掉的檔案,節省儲存空間。更多關於生命週期的內容請參考 檔案生命週期
設定生命週期規則
通過oss_put_bucket_lifecycle
介面,可以實現設定生命週期規則:
lifecycle的配置規則由一段xml表示。
<LifecycleConfiguration>
<Rule>
<ID>delete obsoleted files</ID>
<Prefix>obsoleted/</Prefix>
<Status>Enabled</Status>
<Expiration>
<Days>3</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>
各欄位解釋:
- ID欄位是用來唯一表示本條Rule(各個ID之間不能由內含項目關聯性,比如abc和abcd這樣的)。
- Prefix指定對bucket下的符合特定首碼的檔案使用規則。
- Status指定本條規則的狀態,只有Enabled和Disabled,分別表示啟用規則和禁用規則。
- Expiration節點裡面的Days表示大於檔案最後修改時間指定的天數就刪除檔案,Date則表示到指定的絕對時間之後就刪除檔案(絕對時間服從ISO8601的格式)。
可以通過下面的代碼,設定上述lifecycle規則。
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;
aos_list_t lifecycle_rule_list;
oss_lifecycle_rule_content_t *rule_content;
char *rule_name = "rule_name";
aos_pool_create(&p, NULL);
/* 建立並初始化options */
options = oss_request_options_create(p);
init_options(options);
/* 建立生命週期規則並設定給儲存空間 */
aos_str_set(&bucket, bucket_name);
aos_list_init(&lifecycle_rule_list);
rule_content = oss_create_lifecycle_rule_content(p);
aos_str_set(&rule_content->id, rule_name);
aos_str_set(&rule_content->prefix, "obsoleted");
aos_str_set(&rule_content->status, "Enabled");
rule_content->days = 3;
aos_list_add_tail(&rule_content->node, &lifecycle_rule_list);
s = oss_put_bucket_lifecycle(options, &bucket, &lifecycle_rule_list, &resp_headers);
if (aos_status_is_ok(s)) {
printf("put bucket lifecycle succeeded\n");
} else {
printf("put bucket lifecycle failed\n");
}
aos_pool_destroy(p);
查看生命週期規則
通過oss_get_bucket_lifecycle
介面,可以實現查看生命週期規則:
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;
aos_list_t lifecycle_rule_list;
oss_lifecycle_rule_content_t *rule_content;
char *rule_id;
char *prefix;
char *status;
int days = INT_MAX;
char* date = "";
aos_pool_create(&p, NULL);
/* 建立並初始化options */
options = oss_request_options_create(p);
init_options(options);
/* 獲取儲存空間生命週期規則並列印 */
aos_str_set(&bucket, bucket_name);
aos_list_init(&lifecycle_rule_list);
s = oss_get_bucket_lifecycle(options, &bucket, &lifecycle_rule_list, &resp_headers);
aos_list_for_each_entry(rule_content, &lifecycle_rule_list, node) {
rule_id = apr_psprintf(p, "%.*s", rule_content->id.len, rule_content->id.data);
prefix = apr_psprintf(p, "%.*s", rule_content->prefix.len, rule_content->prefix.data);
status = apr_psprintf(p,"%.*s", rule_content->status.len, rule_content->status.data);
date = apr_psprintf(p, "%.*s", rule_content->date.len, rule_content->date.data);
days = rule_content->days;
}
aos_pool_destroy(p);
清空生命週期規則
通過oss_delete_bucket_lifecycle
介面,實現清空生命週期規則:
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;
aos_pool_create(&p, NULL);
/* 建立並初始化options */
options = oss_request_options_create(p);
init_options(options);
/* 刪除儲存空間生命週期規則 */
aos_str_set(&bucket, bucket_name);
s = oss_delete_bucket_lifecycle(options, &bucket, &resp_headers);
if (aos_status_is_ok(s)) {
printf("delete bucket lifecycle succeeded\n");
} else {
printf("delete bucket lifecycle failed\n");
}
aos_pool_destroy(p);