更新时间:2023-11-09 GMT+08:00

设置生命周期规则

开发过程中,您有任何问题可以在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/intl/zh-cn/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));
    }
}