You need to enable JavaScript to run this app.
文档中心
对象存储

对象存储

复制全文
下载 pdf
存储桶接口
管理桶生命周期(.NET SDK)
复制全文
下载 pdf
管理桶生命周期(.NET SDK)
桶的生命周期规则可按条件自动转换对象的存储类型、删除过期对象或清理未完成的分片上传,以降低存储费用。本文介绍如何通过 TOS 的 .NET SDK 设置、获取和删除生命周期规则。​
前提条件​
  • 使用 2.1.9 及以上版本的 .NET SDK,通过 BuildV2() 创建客户端。​
  • 已配置以下环境变量:TOS_ACCESS_KEY(访问密钥 ID)、TOS_SECRET_KEY(访问密钥)、TOS_BUCKET(已存在的桶名)。​
  • 以华北 2(北京)为例,使用其他地域时需修改 Region 和 Endpoint。​
注意事项​
  • 生命周期任务由服务端异步执行,配置保存成功不代表对象立即转换或删除。​
  • 请确认规则的匹配范围,避免误删数据。​
设置生命周期规则​
您可以调用 PutBucketLifecycle 接口为指定桶设置生命周期规则。​
注意​
  • 为指定桶设置生命周期规则需要您的账号具备 tos:PutLifecycleConfiguration 权限。具体操作,请参见权限配置概述。​
  • 已有配置会被本次提交的整份配置替换。​
  • 追加或修改规则时,应先调用 GetBucketLifecycle 获取现有配置,合并修改后再调用 PutBucketLifecycle 写回。​
  • 示例中的 rule6 用于已开启多版本的桶。若不使用历史版本规则,请移除 rule6;不要为运行示例直接更改业务桶的多版本状态。​
示例代码​
以下代码示例包含按天过期、指定 UTC 日期过期、分片清理、转低频、前缀与标签匹配,以及历史版本处理六种场景。日期采用执行时起 365 天后的 UTC 零点,可按实际需要修改。​
​
using System;​
using TOS;​
using TOS.Error;​
using TOS.Model;​
​
namespace PutBucketLifecycleExample​
{​
internal class Program​
{​
private static void Main(string[] args)​
{​
var ak = Environment.GetEnvironmentVariable("TOS_ACCESS_KEY");​
var sk = Environment.GetEnvironmentVariable("TOS_SECRET_KEY");​
var bucketName = Environment.GetEnvironmentVariable("TOS_BUCKET");​
var endpoint = "https://tos-cn-beijing.volces.com";​
var region = "cn-beijing";​
​
using (var client = TosClientBuilder.Builder().SetAk(ak).SetSk(sk)​
.SetEndpoint(endpoint).SetRegion(region).BuildV2())​
{​
try​
{​
var input = new PutBucketLifecycleInput​
{​
Bucket = bucketName,​
Rules = new[]​
{​
new LifecycleRule​
{​
// rule1:对象创建 70 天后过期。​
ID = "rule1",​
Prefix = "test1/",​
Status = StatusType.StatusEnabled,​
Expiration = new Expiration { Days = 70 }​
},​
new LifecycleRule​
{​
// rule2:对象在指定的 UTC 日期过期。​
ID = "rule2",​
Prefix = "test2/",​
Status = StatusType.StatusEnabled,​
Expiration = new Expiration​
{​
Date = DateTime.UtcNow.Date.AddDays(365)​
}​
},​
new LifecycleRule​
{​
// rule3:清理发起 10 天后仍未完成的分片上传。​
ID = "rule3",​
Prefix = "test3/",​
Status = StatusType.StatusEnabled,​
AbortIncompleteMultipartUpload = new AbortIncompleteMultipartUpload​
{​
DaysAfterInitiation = 10​
}​
},​
new LifecycleRule​
{​
// rule4:对象创建 30 天后转为低频存储。​
ID = "rule4",​
Prefix = "test4/",​
Status = StatusType.StatusEnabled,​
Transitions = new[]​
{​
new Transition​
{​
Days = 30,​
StorageClass = StorageClassType.StorageClassIa​
}​
}​
},​
new LifecycleRule​
{​
// rule5:前缀和标签同时匹配的对象,30 天后转为低频存储。​
ID = "rule5",​
Prefix = "test5/",​
Status = StatusType.StatusEnabled,​
Tags = new[] { new Tag { Key = "key1", Value = "value1" } },​
Transitions = new[]​
{​
new Transition​
{​
Days = 30,​
StorageClass = StorageClassType.StorageClassIa​
}​
}​
},​
new LifecycleRule​
{​
// rule6:仅适用于已开启多版本的桶。​
// 当前版本创建 70 天后过期;成为历史版本 30 天后转低频,40 天后过期。​
ID = "rule6",​
Prefix = "test6/",​
Status = StatusType.StatusEnabled,​
Expiration = new Expiration { Days = 70 },​
NoncurrentVersionTransitions = new[]​
{​
new NonCurrentVersionTransition​
{​
NonCurrentDays = 30,​
StorageClass = StorageClassType.StorageClassIa​
}​
},​
NoncurrentVersionExpiration = new NonCurrentVersionExpiration​
{​
NonCurrentDays = 40​
}​
}​
}​
};​
var output = client.PutBucketLifecycle(input);​
Console.WriteLine("Put bucket lifecycle succeeded, request id {0}", output.RequestID);​
Console.WriteLine("Status code: {0}", output.StatusCode);​
}​
catch (TosServerException ex)​
{​
Console.WriteLine("Put bucket lifecycle failed, request id {0}", ex.RequestID);​
Console.WriteLine("Status code: {0}, error code: {1}, message: {2}",​
ex.StatusCode, ex.Code, ex.Message);​
}​
catch (TosClientException ex)​
{​
Console.WriteLine("Put bucket lifecycle failed, message: {0}", ex.Message);​
}​
}​
}​
}​
}​
​
获取生命周期规则​
您可以调用 GetBucketLifecycle 接口获取指定桶当前的生命周期规则。​
注意​
获取指定桶当前的生命周期规则需要您的账号具备 tos:GetLifecycleConfiguration 权限。​
具体操作请参见权限配置概述。​
示例代码​
以下代码示例输出规则数量和每条规则的内容;桶未配置生命周期规则时,服务端返回 404 和 NoSuchLifecycleConfiguration。​
​
using System;​
using Newtonsoft.Json;​
using TOS;​
using TOS.Error;​
using TOS.Model;​
​
namespace GetBucketLifecycleExample​
{​
internal class Program​
{​
private static void Main(string[] args)​
{​
var ak = Environment.GetEnvironmentVariable("TOS_ACCESS_KEY");​
var sk = Environment.GetEnvironmentVariable("TOS_SECRET_KEY");​
var bucketName = Environment.GetEnvironmentVariable("TOS_BUCKET");​
var endpoint = "https://tos-cn-beijing.volces.com";​
var region = "cn-beijing";​
​
using (var client = TosClientBuilder.Builder().SetAk(ak).SetSk(sk)​
.SetEndpoint(endpoint).SetRegion(region).BuildV2())​
{​
try​
{​
var input = new GetBucketLifecycleInput { Bucket = bucketName };​
var output = client.GetBucketLifecycle(input);​
Console.WriteLine("Get bucket lifecycle succeeded, request id {0}", output.RequestID);​
Console.WriteLine("Status code: {0}", output.StatusCode);​
if (output.Rules != null)​
{​
Console.WriteLine("This bucket has {0} lifecycle rules", output.Rules.Length);​
for (var i = 0; i < output.Rules.Length; i++)​
{​
Console.WriteLine("Rule {0}: {1}", i + 1,​
JsonConvert.SerializeObject(output.Rules[i], Formatting.Indented));​
}​
}​
}​
catch (TosServerException ex)​
{​
Console.WriteLine("Get bucket lifecycle failed, request id {0}", ex.RequestID);​
Console.WriteLine("Status code: {0}, error code: {1}, message: {2}",​
ex.StatusCode, ex.Code, ex.Message);​
}​
catch (TosClientException ex)​
{​
Console.WriteLine("Get bucket lifecycle failed, message: {0}", ex.Message);​
}​
}​
}​
}​
}​
​
删除生命周期规则​
您可以调用 DeleteBucketLifecycle 接口删除指定桶的全部生命周期配置。​
注意​
  • 删除生命周期规则需要您的账号具备tos:PutLifecycleConfiguration 权限。​
  • 该操作不会删除桶和已有对象,也不能恢复此前已被生命周期规则删除的对象。​
示例代码​
​
using System;​
using TOS;​
using TOS.Error;​
using TOS.Model;​
​
namespace DeleteBucketLifecycleExample​
{​
internal class Program​
{​
private static void Main(string[] args)​
{​
var ak = Environment.GetEnvironmentVariable("TOS_ACCESS_KEY");​
var sk = Environment.GetEnvironmentVariable("TOS_SECRET_KEY");​
var bucketName = Environment.GetEnvironmentVariable("TOS_BUCKET");​
var endpoint = "https://tos-cn-beijing.volces.com";​
var region = "cn-beijing";​
​
using (var client = TosClientBuilder.Builder().SetAk(ak).SetSk(sk)​
.SetEndpoint(endpoint).SetRegion(region).BuildV2())​
{​
try​
{​
var input = new DeleteBucketLifecycleInput { Bucket = bucketName };​
var output = client.DeleteBucketLifecycle(input);​
Console.WriteLine("Delete bucket lifecycle succeeded, request id {0}", output.RequestID);​
Console.WriteLine("Status code: {0}", output.StatusCode);​
}​
catch (TosServerException ex)​
{​
Console.WriteLine("Delete bucket lifecycle failed, request id {0}", ex.RequestID);​
Console.WriteLine("Status code: {0}, error code: {1}, message: {2}",​
ex.StatusCode, ex.Code, ex.Message);​
}​
catch (TosClientException ex)​
{​
Console.WriteLine("Delete bucket lifecycle failed, message: {0}", ex.Message);​
}​
}​
}​
}​
}​
​
相关文档​
生命周期规则的配置和执行说明,请参见桶生命周期规则。​
最近更新时间:2026.10.22 18:28:43
这个页面对您有帮助吗?
有用
有用
无用
无用