是的,可以。Directus 支援「S3-compatible」的檔案儲存,Cloudflare R2 本身提供相容的 S3 API,因此用 S3 驅動 + R2 的 endpoint 就能串接。官方文件也明確說明可接 S3 相容的外部儲存並以環境變數設定。 ([Directus][1])
最精簡設定(.env / Docker env)
把你的儲存 location 命名成 s3
(名稱可自訂),關鍵是 endpoint 用 R2 的 S3 API 網域,region 可留空或設一個值(Directus 只需 endpoint)。某些相容服務需要 path-style,Directus 也支援強制 path-style。 ([Koyeb][2])
# 用單一 R2 作為預設儲存
STORAGE_LOCATIONS=s3
STORAGE_S3_DRIVER=s3
STORAGE_S3_KEY=<R2 Access Key ID>
STORAGE_S3_SECRET=<R2 Secret Access Key>
STORAGE_S3_BUCKET=<你的R2 bucket 名稱>
# Cloudflare R2 S3 API endpoint(格式如下)
STORAGE_S3_ENDPOINT=https://<accountid>.r2.cloudflarestorage.com
# 多數情況 region 可留空或設 us-east-1
STORAGE_S3_REGION=us-east-1
# 如需 path-style(不少 S3 相容服務/R2 場景會用到)
STORAGE_S3_FORCE_PATH_STYLE=true
# 其他常見
PUBLIC_URL=https://cms.example.com
R2 的官方文件(S3 相容 API)與 Directus 的「檔案儲存設定」頁面是此作法依據;若用雲端面板(如 Koyeb/Railway 的模板),同樣是填上述變數。 ([Cloudflare Docs][3])
R2 端需要注意
- CORS:若從瀏覽器直接打 R2 物件,要在 R2 bucket 設定對應的 CORS。 ([Cloudflare Docs][3])
- 公開/私有:Directus 走
/assets
轉圖與權限控管;若你想直接走 R2 公有網址做前端直連,請確認權限與快取策略一致。 ([Directus][4])
疑難排除
- 上傳報錯或找不到 host,多半是 endpoint/region 或 path-style 設錯;把
STORAGE_S3_FORCE_PATH_STYLE=true
打開常可解決 S3 相容服務的虛擬主機樣式問題。 ([GitHub][5]) - 若仍有例外狀況,可比照社群討論中的 R2/相容 S3 範例逐一對照環境變數。 ([GitHub][6])