设置生命周期规则
开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。
您可以通过函数set_bucket_lifecycle_configuration设置桶的生命周期规则。
参数描述
字段名 |
类型 |
约束 |
说明 |
---|---|---|---|
option |
请求桶的上下文,配置option |
必选 |
桶参数。 |
bucket_lifecycle_conf |
obs_lifecycle_conf * |
必选 |
桶生命周期配置说明,具体说明请参看下表。 |
blcc_number |
unsigned int |
必选 |
数组bucket_lifecycle_conf的数组成员个数。 |
handler |
obs_response_handler* |
必选 |
回调函数。 |
callback_data |
void * |
可选 |
回调数据。 |
桶生命周期配置结构obs_lifecycle_conf描述如下表:
字段名 |
类型 |
约束 |
说明 |
---|---|---|---|
date |
const char * |
如果没有days元素,且没有transition, noncurrent_version_days, noncurrent_version_transition,则必选 |
表示针对最新版本的对象过期规则生效的时间。该值必须兼容ISO8601格式,而且必须是UTC午夜0点。 |
days |
const char * |
如果没有date元素,且没有transition, noncurrent_version_days, noncurrent_version_transition,则必选 |
表示在对象创建时间后第几天时过期规则生效(仅针对对象的最新版本)。 |
id |
const char * |
可选 |
一条Rule的标识,由不超过255个字符的字符串组成。 |
prefix |
const char * |
必选 |
对象名前缀,用以标识哪些对象可以匹配到当前这条Rule。 |
status |
const char * |
必选 |
标识当前这条Rule是否启用。 |
noncurrent_version_days |
const char * |
可选 |
表示对象在成为历史版本之后第几天时过期规则生效(仅针对历史版本) 生命周期配置中表示历史版本过期时间的Container。您可以将该动作设置在已启用多版本(或暂停)的桶,来让系统删除对象的满足特定生命周期的历史版本(仅针对历史版本)。 |
transition_num |
unsigned int |
如果transition非空,则必选 |
数组transition的数组成员个数。 |
transition |
obs_lifecycle_transtion * |
如果没有date,days,noncurrent_version_transition或者noncurrent_version_days,则必选 |
生命周期配置中表示迁移时间和迁移后对象存储级别的元素(仅针对对象的最新版本)。 |
transition->date |
const char * |
如果transition存在且没有transition.days元素,则必选 |
表示针对最新版本的对象转换规则生效的时间。该值必须兼容ISO8601格式,而且必须是UTC午夜0点。 |
transition->days |
const char * |
如果transition存在且没有transition.date元素,则必选 |
表示在对象创建时间后第几天时转换规则生效(仅针对对象的最新版本)。 |
transition->storage_class |
obs_storage_class |
如果transition存在,则必须按 |
表示最新版本对象将被修改成存储级别。 |
noncurrent_version_transition_num |
unsigned int |
如果obs_lifecycle_noncurrent_transtion非空,则必选 |
数组noncurrent_version_transition的数组成员个数 |
noncurrent_version_transition |
obs_lifecycle_noncurrent_transtion * |
如果没有date,days,transition或者noncurrent_version_days,则必选 |
生命周期配置中表示对象的历史版本迁移时间和迁移后对象存储级别的元素。 |
noncurrent_version_transition->noncurrent_version_days |
const char * |
如果noncurrent_version_transition存在,必选 |
表示对象在成为历史版本之后第几天时转换规则生效(仅针对历史版本) |
noncurrent_version_transition->storage_class |
obs_storage_class |
如果noncurrent_version_transition存在,必选 |
表示历史版本对象将被修改成的存储级别。 |
设置对象转换策略
以下代码展示了如何设置最新版本对象和历史版本对象的转换策略:
static void test_set_bucket_lifecycle_configuration1() { obs_status ret_status = OBS_STATUS_BUTT; // 创建并初始化option obs_options option; init_obs_options(&option); option.bucket_options.host_name = "<your-endpoint>"; option.bucket_options.bucket_name = "<Your bucketname>"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html option.bucket_options.access_key = getenv("ACCESS_KEY_ID"); option.bucket_options.secret_access_key = getenv("SECRET_ACCESS_KEY"); // 设置完成的回调函数 obs_response_handler response_handler = { NULL, &response_complete_callback }; obs_lifecycle_conf bucket_lifecycle_conf; memset(&bucket_lifecycle_conf, 0, sizeof(obs_lifecycle_conf)); //生命周期规则的id bucket_lifecycle_conf.id = "test3"; // 指定前缀"test" bucket_lifecycle_conf.prefix = "bcd"; // 该生命周期规则生效 bucket_lifecycle_conf.status = "Enabled"; // 指定满足前缀的对象创建10天后过期 bucket_lifecycle_conf.days = "10"; obs_lifecycle_transtion transition; memset(&transition, 0, sizeof(obs_lifecycle_transtion)); // 指定满足前缀的对象创建30天后转换 transition.days = "30"; // 指定对象转换后的存储类型 transition.storage_class = OBS_STORAGE_CLASS_STANDARD_IA; bucket_lifecycle_conf.transition = &transition; bucket_lifecycle_conf.transition_num = 1; obs_lifecycle_noncurrent_transtion noncurrent_transition; memset(&noncurrent_transition, 0, sizeof(obs_lifecycle_noncurrent_transtion)); // 指定满足前缀的对象的历史版本30天后转换 noncurrent_transition.noncurrent_version_days = "30"; // 指定满足前缀的对象的历史版本转换后的存储类型 noncurrent_transition.storage_class = OBS_STORAGE_CLASS_STANDARD_IA; bucket_lifecycle_conf. noncurrent_version_transition = &noncurrent_transition; bucket_lifecycle_conf.noncurrent_version_transition_num = 1; set_bucket_lifecycle_configuration(&option, &bucket_lifecycle_conf, 1, &response_handler, &ret_status); if (OBS_STATUS_OK == ret_status) { printf("set bucket lifecycle configuration success.\n"); } else { printf("set bucket lifecycle configuration failed(%s).\n", obs_get_status_name(ret_status)); } }
设置对象过期时间
以下代码展示了如何设置最新版本对象和历史版本对象的过期时间:
static void test_set_bucket_lifecycle_configuration2() { obs_options option; obs_status ret_status = OBS_STATUS_BUTT; // 设置option init_obs_options(&option); option.bucket_options.host_name = HOST_NAME; option.bucket_options.bucket_name = bucket_name; //从环境变量读取ak/sk option.bucket_options.access_key = getenv("ACCESS_KEY_ID"); option.bucket_options.secret_access_key = getenv("SECRET_ACCESS_KEY"); // 设置完成的回调函数 obs_response_handler response_handler = { NULL, &response_complete_callback }; obs_lifecycle_conf bucket_lifecycle_conf; memset(&bucket_lifecycle_conf, 0, sizeof(obs_lifecycle_conf)); //生命周期规则的id bucket_lifecycle_conf.id = "test1"; // 指定前缀"test" bucket_lifecycle_conf.prefix = "test"; // 指定满足前缀的对象创建10天后过期 bucket_lifecycle_conf.days = "10"; // 指定满足前缀的对象的历史版本20天后过期 bucket_lifecycle_conf.noncurrent_version_days = "20"; // 该生命周期规则生效 bucket_lifecycle_conf.status = "Enabled"; set_bucket_lifecycle_configuration(&option, &bucket_lifecycle_conf, 1, &response_handler, &ret_status); if (OBS_STATUS_OK == ret_status) { printf("set bucket lifecycle configuration success.\n"); } else { printf("set bucket lifecycle configuration failed(%s).\n", obs_get_status_name(ret_status)); } }