返回部落格
工具評比技術科普

2026 圖床 API 技術規格完整指南:B2B 採購前必檢 15 項 checklist

發佈於16 min read
分享文章

採購圖床跟採購資料庫一樣,不該只看 landing page 的 hero section。

公司內部要我評估一個替代方案,我把過去三年線上踩過的坑整理成一份 checklist。這份文件不是用來比誰 CDN 節點多,而是拿去貼到 RFP 裡、讓供應商逐項回答「Yes / No / Partial」的那種表格。從架構角度,圖床這東西表面上都長一樣,底層原理差很多。

如果你只想看哪家便宜、哪家免費,請先去看 免費圖床服務完整比較 或 Imgur 替代方案。這篇是給技術主管、SaaS 採購、DevOps 看的。

為什麼 B2B 圖床選型跟個人用戶完全不是同一件事

個人用戶在乎「能上傳嗎?連結好分享嗎?」

企業在乎的是另一串問題。合約條款寫不寫 SLA?API 被打爆時 rate limit 怎麼退化?Egress 費用會不會在某個月突然跳兩倍?GDPR 稽核官問 EXIF 資料留多久時回不回得出來?

說穿了,B2B 採購圖床本質是在買三件事:可預測的成本曲線、可驗證的系統保證、可整合的協議介面。底下 15 項就是圍繞這三件事展開。

線上炸過一次以後我才學乖:免費方案能撐 demo,撐不了正式流量。

15 項 RFP checklist(可直接複製進採購文件)

下面的表格是我實際用在評估表裡的版本。每一項都有驗證方式,不是問「你們支援嗎?」就算通過——那種問法供應商一律答 Yes。

# 規格項目 驗證方式 及格標準
1 S3 API 相容性 跑 s3api list-objects-v2 --prefix 回應 schema 與 AWS 一致
2 Multipart Upload 上傳 500MB 檔案,中斷後 resume 支援 part retry
3 Pre-signed URL 產一組 15 分鐘有效 URL 並驗簽 HMAC-SHA256,可設 TTL
4 Webhook 事件 觸發 upload/delete 事件 HMAC 簽章 + retry 機制
5 Rate Limit 策略 跑 burst 測試 回 429 + Retry-After header
6 SLA 條款 讀 MSA 合約 ≥99.9%,有 service credit
7 可用區 / 多區域 問 region list ≥2 region,跨區同步
8 Egress 計費 要 pricing sheet 單價透明,有 tier 折扣
9 圖片處理流水線 測 on-the-fly transform 支援 WebP/AVIF、URL 參數
10 CDN 邊緣節點 跑全球 ping 測試 ≥50 PoP,含亞太節點
11 EXIF / Metadata 控制 上傳帶 GPS 的照片 可選擇性 strip
12 認證方式 看 API 文件 支援 OAuth2 + API Key 輪替
13 稽核日誌 問 log retention ≥90 天,可匯出
14 Compliance 認證 要 SOC 2 / ISO 27001 報告 至少一張
15 資料離境與刪除 問 DPA 條款 可指定 region,支援硬刪

不要只勾 Yes/No。每一項都要對方附上文件連結或技術驗證步驟。沒附的那些,實務上十有八九「有規劃但還沒做」。

核心規格的實作細節

表格只是骨架。底下這幾項是合約談判時最常被供應商矇混的地方,拆開講清楚。

1. S3 相容性不是一句話的事

「我們 S3 相容」是圖床供應商最愛講的一句話。但 S3 API 有超過 200 個 operation,真正要驗證的是你會用到的那一組。

最基本的 GetObject、PutObject 誰都有。往下走:

# 測 multipart
aws s3api create-multipart-upload --bucket test --key big.mp4 \
  --endpoint-url https://vendor.example.com

# 測 versioning
aws s3api put-bucket-versioning --bucket test \
  --versioning-configuration Status=Enabled

# 測 lifecycle
aws s3api put-bucket-lifecycle-configuration ...

實測下來,三項中能全通過的不到六成。尤其是 bucket lifecycle 跟 object lock——這兩個少了,合規稽核會出事。

2. Pre-signed URL 的 TTL 與簽章演算法

這是 B2B 場景最常用的認證方式。使用者沒有你家的 credentials,你發一張限時票給他。

底層原理是 HMAC-SHA256,把 method、path、expiry、headers 打包成 string to sign,用 secret key 簽名。好的供應商會給你:

  • 可調 TTL(1 分鐘到 7 天都行)
  • 可鎖定來源 IP(aws:SourceIp 條件)
  • 可限制 HTTP method
  • 支援 SigV4(SigV2 已過時,還在用 SigV2 的直接淘汰)

差的供應商會給你一條「永不過期的 public URL」然後說這叫 signed。這就是為什麼要 pre-signed URL 寫進 RFP。

3. Webhook 簽章驗證——踩過這個雷

Webhook 是事件驅動架構的關鍵。上傳完成、病毒掃描完成、轉檔完成,都該推一個事件過來。

但 webhook 的安全性是供應商最容易偷工減料的地方。我看過的爛實作包括:

  1. 沒有任何簽章,裸 POST
  2. 有簽章但 secret 寫在 query string
  3. 有簽章但用 MD5
  4. 有簽章但沒附 timestamp,可以被 replay

合格的 webhook 必須:

  • HMAC-SHA256 簽章,放在 X-Signature header
  • 附 X-Timestamp,超過 5 分鐘的請求拒收
  • 失敗自動 retry(指數退避,至少 3 次)
  • 提供 dead letter queue 或 replay API

驗證 webhook 的 Go code 大概長這樣:

func verifyWebhook(body []byte, sig, ts, secret string) bool {
    if time.Since(parseTS(ts)) > 5*time.Minute {
        return false
    }
    mac := hmac.New(sha256.New, []byte(secret))
    mac.Write([]byte(ts + "." + string(body)))
    expected := hex.EncodeToString(mac.Sum(nil))
    return hmac.Equal([]byte(sig), []byte(expected))
}

少了 timestamp 那段,replay 攻擊直接打穿你整個事件系統。

4. Rate Limit 的兩層要求

Rate limit 要看兩層:你的配額是多少,以及超過配額會發生什麼。

配額好談,多半是 per-second / per-minute 寫在 plan 裡。真正重要的是超限行為:

行為 合格性
直接 503 斷線 不合格
回 429 不帶 Retry-After 半合格
回 429 + Retry-After header 合格
回 429 + Retry-After + quota header 優秀

加分項是提供 X-RateLimit-Remaining 這類 header,讓你可以主動節流而不是被動吃 429。

5. SLA 條款的魔鬼細節

大家都寫 99.9%。99.9% 等於每月 43.2 分鐘 downtime,99.95% 是 21.6 分鐘,99.99% 是 4.3 分鐘。

但 SLA 的真正價值不在那個數字,在 exclusion clause。要逐條看:

  • 計畫性維護算不算 downtime?
  • 區域性中斷算不算?
  • DDoS 攻擊期間算不算?
  • 第三方依賴(例如上游 DNS)算不算?

更重要的是 service credit 機制。沒達到 SLA 時退多少?退帳戶 credit 還是現金?credit 能累積還是過期?

坦白說,大多數 SLA 寫起來都漂亮,實際申訴時多數被 exclusion 擋下。所以採購時不能只看百分比,要看過去 12 個月的真實 incident history——這可以要對方在 NDA 下提供。

6. Egress 計費——這是成本黑洞

Egress(流量出站)是圖床最容易爆預算的地方。供應商最愛的套路是儲存費便宜、egress 費高。

從數據來看,主流供應商的 egress 單價差異可以到 10 倍以上。Cloudflare R2 做到 zero egress(在自家網路內),Cloudinary 走 credit 模型,imgix 按 request 計。哪個划算完全看你的流量形態。

採購前務必問清楚三件事:

  1. 是否有 tier 階梯折扣?通常 10TB/月以上會有明顯優惠
  2. 跨 region 的內網流量算不算 egress?
  3. CDN hit 算不算 egress?有些供應商把 CDN cache hit 也算流量

我踩過這個雷:測試環境月流量 200GB 沒事,上線後瞬間衝到 8TB,帳單多一個零。合約簽前沒問清楚 overage 行為,當月直接吃滿。

7. CDN 邊緣節點與真實延遲

PoP 數字很會膨脹。供應商寫「300+ PoP」聽起來很猛,實際上可能 280 個在歐美,亞太只有 5 個。

驗證方法很簡單:要對方給 anycast IP,你從不同地區 VPS(台灣、東京、新加坡、法蘭克福、聖保羅)跑 mtr 看真實 RTT。低於 80ms 才算可用。

亞太區的客戶如果你的 CDN 要走回美西,那 150ms+ 起跳,前端圖片載入體感就很差。這在 B2B SaaS 場景——尤其是電商跟 media——會直接影響轉換率。

容易被忽略的三個規格

這三項不在大家常講的「圖床比較表」裡,但真的用起來會痛。

EXIF 與 Metadata 的合規處理

EXIF 裡有 GPS 座標、相機序號、拍攝時間。上傳到公開圖床,這些資料預設全部帶著走。

B2B 場景要問:

  • 可否選擇性移除 EXIF(只拿掉 GPS,保留版權資訊)?
  • 是否支援 IPTC / XMP metadata 操作?
  • Metadata 處理是上傳時還是 on-the-fly?

GDPR 跟台灣個資法都把 GPS 當作個人資料。處理不當,法遵風險直接轉嫁到你公司。

OAuth2 vs API Key 的混合認證

老派圖床只給 API Key。現代 B2B 要求混合:

  • 內部系統對系統:API Key + IP allowlist
  • 使用者前端 SPA:OAuth2 PKCE flow
  • 臨時存取:Pre-signed URL

如果供應商只給你一把永久 API Key 要你自己處理 scope,那是把安全風險甩鍋給客戶。合格的方案應支援 scoped token、自動輪替、撤銷 API。

硬刪除與資料留存

歐盟客戶要求「被遺忘權」執行時間 ≤30 天。很多圖床寫「我們會刪除」,實際是軟刪除——物件還躺在 S3 裡、CDN cache 裡、備份帶裡。

採購時一定要確認:

  1. 刪除是否寫進 DPA(Data Processing Agreement)?
  2. 備份週期是否有對應刪除機制?
  3. 能否提供刪除證明?

這一項我處理過一次真實案例,客戶收到 GDPR 刪除申請,結果供應商的 cold storage backup 保留 365 天不能動。法務往返三個月。

lpic.cc 的定位說明

必須誠實講:lpic.cc 目前不是 B2B 企業級方案。

我們定位在個人開發者、部落客、論壇分享場景,提供免費上傳、密碼保護、30 天保留。底層採用雲端物件儲存 + 自建 API,架構上確實用到這篇講的幾項(pre-signed URL、webhook、EXIF 處理),但沒有提供企業 SLA、沒有 SOC 2 認證、也沒有 DPA。

如果你是技術主管在找產線級圖床,這篇 checklist 拿去評 Cloudinary、imgix、Cloudflare Images、ImageKit 比較實用。如果你在找個人或小團隊用的輕量方案,lpic.cc 可以試試——免費上傳看看 就知道符不符合你的場景。

常見問題 FAQ

Q1:小團隊有必要用企業級圖床嗎?

不一定。月活 1 萬以下、流量 <500GB/月,Cloudflare R2 + Workers 自己搭一層就夠用,成本可以壓到 $5/月以下。企業級方案的價值在 SLA、合規、support SLA,這些小團隊未必需要。但如果你服務 B2B 客戶、客戶合約裡寫了 DPA 要求,那沒得選。

Q2:S3 相容性真的重要嗎?不是所有圖床都支援?

非常重要。S3 API 是事實標準,支援代表你可以用成熟的 SDK、Terraform provider、備份工具。不支援代表你被鎖在供應商私有 API,未來遷移成本極高。這是典型的 vendor lock-in 指標。

Q3:Webhook 跟 polling 差在哪?為什麼一定要 webhook?

Polling 是你每 N 秒問一次「好了沒」,webhook 是對方完成後推給你。差別在延遲(秒級 vs 毫秒級)跟成本(你的 API call 配額 vs 零成本)。上傳完成、轉檔完成、病毒掃描等事件,沒有 webhook 基本無法做即時 UX。

Q4:SLA 99.9% 跟 99.99% 真的差那麼多嗎?

數字上是 43 分鐘 vs 4 分鐘/月。實際影響看你的業務。如果是電商結帳流程的商品圖,每分鐘都是收入損失;如果是內部員工手冊圖,99.9% 甚至 99% 都無所謂。採購時把 SLA 需求跟真實業務影響對齊,不要盲目追高。

Q5:Egress 零費用的 Cloudflare R2 是不是無腦選?

不是。R2 的 zero egress 限定在 Cloudflare 網路內(經過 Workers 或 CDN),若你要從其他雲拉資料出來,照樣算錢。另外 R2 的 class A operation(寫入類)單價不便宜,寫多讀少的場景未必划算。算總帳看你的 read/write 比例。

參考資料

#圖床 API#S3 相容#SLA#CDN#Webhook#企業採購#DevOps#Signed URL
H

作者

Harvey Zhang

共同創辦人兼 CTO

後端工程師出身,從系統架構角度深度解析圖片託管服務的技術實現。