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 days 後刪除,然後儲存。

或者使用 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。

生命週期規則會刪除前置詞以外的檔案嗎?

不會。設有前置詞篩選條件的規則,只會影響以該前置詞開頭的物件鍵。沒有篩選條件的規則會套用到整個儲存貯體,所以務必設定一個。