OSS為對象提供檔案生命週期管理。您可以為某個儲存空間定義生命週期配置,來為該儲存空間的檔案定義各種規則。目前,使用者可以通過規則來刪除相匹配的檔案。每條規則都由如下幾個部分組成:
- 檔案名稱首碼,只有匹配該首碼的檔案才適用這個規則。
- 操作,使用者希望對匹配的檔案所執行的操作。
- 日期或天數,使用者期望在特定日期或者是在檔案最後修改時間後多少天執行指定的操作。
設定生命週期
生命週期的配置規則由一段xml表示。
<LifecycleConfiguration>
<Rule>
<ID>delete obsoleted files</ID>
<Prefix>obsoleted/</Prefix>
<Status>Enabled</Status>
<Expiration>
<Days>3</Days>
</Expiration>
</Rule>
<Rule>
<ID>delete temporary files</ID>
<Prefix>temporary/</Prefix>
<Status>Enabled</Status>
<Expiration>
<Date>2022-10-12T00:00:00.000Z</Date>
</Expiration>
</Rule>
</LifecycleConfiguration>
一個生命週期的Config裡面可以包含多個Rule(最多1000個)。
各欄位解釋:
- ID欄位是用來唯一表示本條規則。
- Prefix指定對儲存空間下的符合特定首碼的檔案使用規則,不能重疊。
- Status指定本條規則的狀態,只有Enabled和Disabled,分別表示啟用規則和禁用規則。
- Expiration節點裡面的Days表示大於檔案最後修改時間指定的天數就刪除檔案,Date則表示到指定的絕對時間之後就刪除檔案(絕對時間服從ISO8601的格式)。
可以通過下面的代碼,設定上述生命週期規則。
using Aliyun.OSS;
// 初始化OssClient
var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
var setBucketLifecycleRequest = new SetBucketLifecycleRequest(bucketName);
// 建立第一條規則
LifecycleRule lcr1 = new LifecycleRule()
{
ID = "delete obsoleted files",
Prefix = "obsoleted/",
Status = RuleStatus.Enabled,
ExpriationDays = 3
};
//建立第二條規則
//當ExpirationTime指定使用Date時,請注意此時的含義是:從這個時刻開始一直生效
LifecycleRule lcr2 = new LifecycleRule()
{
ID = "delete temporary files",
Prefix = "temporary/",
Status = RuleStatus.Enabled,
ExpirationTime = DateTime.Parse("2022-10-12T00:00:00.000Z")
};
setBucketLifecycleRequest.AddLifecycleRule(lcr1);
setBucketLifecycleRequest.AddLifecycleRule(lcr2);
client.SetBucketLifecycle(setBucketLifecycleRequest);
注意
- 上面的規則一中ExpriationDays使用了Days,表示3天之後一直生效。
- 上面的規則二中ExpriationDays使用了Date,表示2022-10-12T00:00:00.000Z之後一直生效。除非明確清楚使用Date時的含義,否則請慎重使用。
獲取生命週期
可以通過下面的代碼獲取上述生命週期規則。
using Aliyun.OSS;
var rules = client.GetBucketLifecycle(bucketName);
foreach (var rule in rules)
{
Console.WriteLine("ID: {0}", rule.ID);
Console.WriteLine("Prefix: {0}", rule.Prefix);
Console.WriteLine("Status: {0}", rule.Status);
if (rule.ExpriationDays.HasValue)
Console.WriteLine("ExpirationDays: {0}", rule.ExpriationDays);
if (rule.ExpirationTime.HasValue)
Console.WriteLine("ExpirationTime: {0}", FormatIso8601Date(rule.ExpirationTime.Value));
}
提示:
- 完整代碼參考:GitHub
清空生命週期
可以通過下面的代碼清空儲存空間中生命週期規則。
using Aliyun.OSS;
// 初始化OssClient
var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
var LifecycleRequest = new SetBucketLifecycleRequest(bucketName);
client.SetBucketLifecycle(LifecycleRequest);