服務

檔案上傳與媒體庫系統怎麼做?大檔上傳、轉檔、CDN 與防盜連的完整規劃

2026.08.25 · 76 次瀏覽
檔案上傳與媒體庫系統怎麼做?大檔上傳、轉檔、CDN 與防盜連的完整規劃

從直傳架構、轉檔佇列到簽章網址,一次講清三種方案的成本落差、五個必踩陷阱與 90 天上線路線圖。

分享:

一支 800MB 的影片,讓整個網站掛掉 12 分鐘

某教育單位的講師上傳一支 800MB 課程影片,檔案先進了 PHP 記憶體,回傳 413 Request Entity Too Large,重試三次後記憶體吃滿,全站停擺 12 分鐘。帳單更難看:影片與程式放同一顆磁碟、靠應用層串流輸出,單月流量費比開發費還貴。這是「把上傳當成一個表單欄位」的必然結果。

適用情境 × 不適用情境

適合投資完整媒體庫:

  • 使用者會上傳大於 100MB 的檔案(影片、設計原稿、掃描 PDF)
  • 同一張圖要以多種尺寸出現(縮圖、主圖、OG 圖)
  • 內容有付費牆或權限控管,網址被複製不能就外流
  • 檔案超過 1 萬筆,需要標籤、搜尋、版本與重複偵測
  • 有法遵需求:稽核軌跡、保存年限、刪除紀錄

不適合、別浪費預算:

  • 形象官網,圖片一次上傳 30 張就不再變動
  • 全站檔案低於 2GB 且無影片,CMS 內建媒體庫已足夠
  • 上傳者只有 1–2 位同事,可接受雲端硬碟共享連結
  • 產品仍在驗證期,還不確定使用者會不會上傳

替代方案矩陣:三條路的真實差距

方案優點缺點成本級距
A. 主機本地磁碟開發最快、無跨網域設定無法水平擴充、備份困難、流量走主機頻寬、磁碟滿就當機開發 NT$15,000 起;主機升級費隨檔案量線性上升
B. 物件儲存+CDN 自組可攜、單價最低、轉檔與簽章規則可自訂要自己處理直傳、轉檔佇列、快取失效與清理排程開發 NT$60,000–150,000;Cloudflare R2 標準級 US$0.015/GB-月、對外流量免費,或 S3 Standard US$0.023/GB-月+外流約 US$0.09/GB
C. 全託管媒體 SaaS轉檔、縮圖、播放器、防盜連開箱即用單價高、綁定深、超量計費難預測開發 NT$40,000–80,000;Cloudinary 免費方案含 10GB 儲存與 20GB 觀看頻寬,付費依用量跳級

判斷公式:月外流量(GB)× 單價 × 12 < 自組開發費差額 就選 SaaS,反之選 B。影音型專案幾乎都會在第二年翻轉成 B 較划算。

完整流程拆解

  • 第 1 週|規格定義:盤點檔案型別、最大尺寸、每日筆數、保存年限。交付《媒體規格表》與《權限矩陣》,工具 Notion。
  • 第 2 週|架構設計:定直傳路徑、命名規則、轉檔規格(影片轉 H.264 720p/1080p HLS、圖片統一 WebP)。交付架構圖,工具 Figma。
  • 第 3–5 週|核心開發:後端簽發預簽章網址,瀏覽器分片直傳物件儲存,不經過應用伺服器;完成觸發 webhook 寫入資料庫並丟進佇列。工具 Laravel Queue/BullMQ、Uppy、FFmpeg。
  • 第 6 週|媒體庫後台:標籤、搜尋、替換、版本、批次與軟刪除。交付後台與操作手冊。
  • 第 7 週|CDN 與防護:綁 Cloudflare 快取、設 Referer 白名單與簽章有效期(私有內容建議 15 分鐘)、開 WAF 速率限制、接 ClamAV。
  • 第 8 週|壓測驗收:模擬 50 人同時上傳 500MB 檔案,量測失敗率與續傳成功率。交付驗收報告與監控看板(UptimeRobot+Sentry)。

真實成本完整拆解

以「月增 300GB、累積 3TB、月外流 5TB」的影音型專案估算:

  • 開發費:直傳與續傳 NT$25,000/轉檔佇列 NT$30,000/媒體庫後台 NT$35,000/權限與簽章 NT$18,000
  • 儲存費:3TB 放 R2 約 US$45/月,放 S3 Standard 約 US$69/月
  • 流量費(最大隱藏費用):R2 外流 US$0;S3 直出 5TB 約 US$450/月,這一條就可能是全案最貴科目
  • 轉檔運算:自架 FFmpeg 需一台 4 vCPU 工作機約 NT$1,800/月
  • 常被漏算:物件操作費(R2 Class A 每百萬次 US$4.50、Class B US$0.36)、異地備份複本、掃毒授權、自訂網域與 SSL、孤兒檔案清理排程,以及每年 15–20% 維護費

ScriptWalker 的「檔案上傳與媒體庫系統建置」起價 NT$68,000,含直傳、轉檔佇列與基本後台;影音串流與 DRM 另計。

實施真相 vs 客戶想像

  • 想像:上傳就是一個按鈕。真相:大檔要分片、續傳、處理斷線與重複提交,光上傳就佔模組 40% 工時。
  • 想像:影片上傳完就能播。真相:30 分鐘影片轉多解析度 HLS 要 5–20 分鐘,前台必須有「處理中」狀態與通知。
  • 想像:雲端存檔很便宜。真相:便宜的是儲存、貴的是流量,S3 與 R2 的年度差額可能超過整個開發費。
  • 想像:網址很長沒人猜得到。真相:分享一次就永久外流,沒有簽章有效期等於沒有權限控管。
  • 想像:上線後就不用管。真相:沒有清理排程,兩年後 30–40% 是孤兒檔案,你每月都在為它們付錢。

常見陷阱 × 怎麼避開

  • 檔案先經過應用伺服器。解法:改用預簽章網址讓瀏覽器直傳,伺服器只發證與記帳。
  • 只靠副檔名驗證型別。解法:用 magic bytes 檢查真實 MIME,以隨機 UUID 重新命名並剝除 EXIF。
  • 轉檔跑在請求執行緒裡。解法:進佇列非同步處理,設重試上限與死信佇列,失敗能人工重跑。
  • 私有內容用公開網址。解法:Bucket 全私有,只給短效期簽章網址,CDN 加 Referer 白名單。
  • 沒有孤兒檔案清理。解法:上傳先寫「待確認」,24 小時未關聯業務資料自動刪除,每月對帳。
  • 沒有掃毒與上傳配額。解法:觸發 ClamAV,未過關前隔離不供應;依帳號設容量上限、CDN 開速率限制。

成功指標 + 上線後 90 天路線圖

  • 第 30 天:看上傳成功率(目標 >98%)、平均上傳耗時、413/逾時錯誤數;優化分片大小與續傳邏輯。
  • 第 60 天:看轉檔佇列積壓(目標中位數 <5 分鐘)、失敗重試率、CDN 快取命中率(目標 >90%)。
  • 第 90 天:看每 GB 實際成本、孤兒檔案比例(目標 <5%)、盜連攔截數;導入生命週期政策把冷資料轉入低頻存取層。

決策清單

  • ☐ 你能說出單一檔案的最大允許尺寸嗎?
  • ☐ 你知道每月新增容量與外流流量嗎?
  • ☐ 上傳檔案中有需要權限控管的私有內容嗎?
  • ☐ 你需要影片轉檔或多解析度串流嗎?
  • ☐ 同一張圖需要三種以上尺寸嗎?
  • ☐ 上傳者是不特定的外部使用者嗎?
  • ☐ 你有稽核軌跡或保存年限的法遵要求嗎?
  • ☐ 你的應用目前跑在多台伺服器上嗎?
  • ☐ 你能接受轉檔延遲 5–20 分鐘嗎?
  • ☐ 你有預算負擔每年 15–20% 維護費嗎?
  • ☐ 你有人力維運佇列與監控嗎?
  • ☐ 你需要跨雲搬遷的可攜性嗎?
  • ☐ 你評估過流量費而不只是儲存費嗎?

勾 7 題以上就該做方案 B;勾 3 題以下,現成 CMS 媒體庫已足夠。

常見問題 FAQ

大檔上傳該用什麼技術?

超過 100MB 建議走分片上傳(multipart upload)+瀏覽器直傳。前端用 Uppy 或 tus 協定處理分片與斷點續傳,後端只簽發預簽章網址。網路中斷時能從失敗的分片繼續,不必整支重傳。

Cloudflare R2 和 AWS S3 該選哪一個?

看流量結構。外流量遠大於儲存量(影音、下載型網站)時,R2 因不收對外流量費通常勝出;已大量相依 AWS、需要成熟生命週期與分析生態者,S3 整合度較高。兩者都相容 S3 API。

防盜連要怎麼做才有效?

三層一起做:Bucket 保持私有、對外只給短效期簽章網址、CDN 設 Referer 白名單與速率限制。猜不到的長網址不是安全機制;付費內容再加單次播放憑證或 DRM。

已上線的舊系統可以改造嗎?

可以,分兩階段:先把新上傳導向物件儲存並保留舊檔讀取路徑,再用背景任務逐批搬遷舊檔並改寫資料庫欄位。3TB 以內多半兩到三週完成,不需停機。

下一步

正在評估媒體管線?我們提供 30 分鐘免費架構諮詢:帶著檔案型別、月增容量與流量估算,現場算出 A/B/C 三案的兩年總持有成本,並附《媒體規格表》範本讓你直接填。

分享: