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

  1. 打开存储桶的 Settings,找到 Object lifecycle rules,然后选择 Add rule。
  2. 为规则命名,例如 expire-7d,并把前缀设为 tmp/7d/。
  3. 选择在对象上传 7 天后删除,然后保存。

或者使用 Wrangler:

npx wrangler r2 bucket lifecycle add your-bucket expire-7d tmp/7d/ --expire-days 7

Amazon S3

  1. 打开存储桶,进入 Management,选择 Create lifecycle rule。
  2. 为规则命名,选择 Limit the scope using filters,前缀填 tmp/7d/。
  3. 在操作中选择 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。

生命周期规则会删除前缀以外的文件吗?

不会。带前缀筛选的规则只影响以该前缀开头的键。不带筛选的规则会作用于整个存储桶,所以请务必设置前缀。