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 days 後刪除,然後儲存。
或者使用 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。
生命週期規則會刪除前置詞以外的檔案嗎?
不會。設有前置詞篩選條件的規則,只會影響以該前置詞開頭的物件鍵。沒有篩選條件的規則會套用到整個儲存貯體,所以務必設定一個。