~/VibeHandbook
免費 PDF

Cloudflare

developers.cloudflare.com

R2

是什麼

想像一個巨大的線上倉庫,你把裝著檔案的箱子放進去,以後再取出來。R2 就是 Cloudflare 的物件儲存——正是那個倉庫——一個用來存放檔案的地方:圖片、影片、備份、使用者上傳內容、構建產物。它使用與 Amazon S3 相同的 (應用程式程式設計介面,工具用來與它對話的一組命令),因此大多數 S3 工具和 SDK(軟體開發工具包,現成的程式碼庫)無需改動即可直接對接。最顯著的區別在於定價:R2 對儲存和操作收費,但不收取出站流量費(資料離開倉庫不收費),因此對外提供資料是免費的。

優勢

  • 零出站流量費——對於媒體密集型或下載密集型應用是一大節省。
  • 相容 S3 的 API,現有工具和庫可以直接使用。
  • 可直接繫結到 Worker 進行讀寫,程式碼中無需任何憑據。
  • 可置於 Cloudflare 的 CDN(內容分發網路,在每位訪問者附近保留檔案副本的全球伺服器群)之後,實現快速的快取分發。
  • 無需預置即可擴充套件到大物件和大儲存桶。

取捨

  • 它是物件儲存,不是檔案系統或資料庫——無法在檔案內部進行查詢。
  • 操作(PUT/GET/LIST)會計費,因此頻繁的訪問模式會累積成本。
  • 強一致性和功能特性在細節上與 S3 有所不同;請留意邊界情況。
  • 對於體積小、頻繁修改的值,KV(鍵值儲存,就像一本巨大的字典)或 D1( 資料庫)更合適。

何時使用

將 R2 用於使用者上傳內容、生成的檔案、大型靜態資源、資料匯出和備份——尤其是在 S3 上頻寬成本會很高的任何場景。

與 vibe coding 的契合度

R2 與 AI 主導的構建配合得很好,因為繫結省去了通常的憑據處理流程——agent 直接寫入 env.BUCKET。告訴 agent 檔案是公開的(通過 Worker 或自定義域名提供)還是私有的(簽名訪問),這樣它才能正確接入分發邏輯。下面的示例繫結一個儲存桶並從 上傳一個檔案。

# wrangler.toml
[[r2_buckets]]
binding = "BUCKET"
bucket_name = "uploads"
npx wrangler r2 bucket create uploads
npx wrangler r2 object put uploads/logo.png --file ./logo.png