2026年9月30日 · 阅读约 5 分钟
如何让 S3、R2 和 B2 中的文件在几天后自动删除
临时分享的文件会越积越多:给别人审阅的截图、发给测试人员的构建、发给客户的文件。生命周期规则可以让存储桶自己清理。诀窍在于上传时就决定文件的保留时长,把文件放到带有规则的前缀下。
前缀方案
每种保留时长创建一条规则,每条规则只作用于自己的文件夹:
tmp/1d/1 天后删除tmp/7d/7 天后删除tmp/30d/30 天后删除
把文件上传到 tmp/7d/2026/09/report.pdf,一周后它就会消失。tmp/ 以外的内容永远不会受影响。
Cloudflare R2
- 打开存储桶的 Settings,找到 Object lifecycle rules,然后选择 Add rule。
- 为规则命名,例如
expire-7d,并把前缀设为tmp/7d/。 - 选择在对象上传 7 天后删除,然后保存。
或者使用 Wrangler:
npx wrangler r2 bucket lifecycle add your-bucket expire-7d tmp/7d/ --expire-days 7Amazon S3
- 打开存储桶,进入 Management,选择 Create lifecycle rule。
- 为规则命名,选择 Limit the scope using filters,前缀填
tmp/7d/。 - 在操作中选择 Expire current versions of objects,填入 7 天。如果存储桶启用了版本控制,还要永久删除非当前版本。
使用 AWS CLI:
{
"Rules": [
{
"ID": "expire-7d",
"Status": "Enabled",
"Filter": { "Prefix": "tmp/7d/" },
"Expiration": { "Days": 7 }
}
]
}
aws s3api put-bucket-lifecycle-configuration --bucket your-bucket \
--lifecycle-configuration file://lifecycle.json
该命令会替换存储桶的整个生命周期配置,所以请把已有的规则一并写进去。
Backblaze B2
在存储桶的 Lifecycle Settings 中选择自定义规则,添加一条文件名前缀为 tmp/7d/ 的规则。B2 分两个阶段执行:days from uploading to hiding(上传到隐藏的天数)和 days from hiding to deleting(隐藏到删除的天数)。分别设为 6 和 1,文件大约一周后就会消失。
文件到底什么时候被删除?
生命周期规则在后台运行,通常每天一次。Amazon S3 从上传时间开始计算,向上取整到下一个 UTC 午夜,然后把对象排入删除队列;对象过期后你就不再为它付费。实际上,文件在到期后最多还可能被访问约一天。如果链接必须在准确的时间失效,请改用预签名 URL。
常见问题
电脑关机时,生命周期规则还会删除文件吗?
会。规则保存在存储桶中,由服务商执行,你这边不需要运行任何东西。
可以让文件在几小时后删除,而不是几天吗?
不行。生命周期规则以整天为单位。如果链接需要在几小时内失效,请让文件保持私有,并分享预签名 URL。
生命周期规则会删除前缀以外的文件吗?
不会。带前缀筛选的规则只影响以该前缀开头的键。不带筛选的规则会作用于整个存储桶,所以请务必设置前缀。