跳至主要内容

圖片資料怎麼送到伺服器

在處理圖片上傳時,常見有兩種做法:舊的 JSON + data URL 方式,以及現代推薦的 multipart 上傳。


A. 以前:JSON + data URL

把圖片先轉成 base64 data URL 字串:

data:image/png;base64,iVBORw0KGgo...

然後把它塞進 JSON 裡一起送出。

問題:

  • 圖片一多(多參考圖)、或編輯操作更複雜,JSON 會變很大
  • base64 會膨脹體積(約 1/3),也更容易遇到長度限制、解析/序列化問題
  • 某些後端/代理層對「超大的 JSON」不穩,導致「容易失敗」

B. 現在:multipart 上傳

改用 HTTP 常見的檔案上傳格式:multipart/form-data

圖片以「檔案欄位」的方式直接傳,不用塞進 JSON 字串。

const formData = new FormData();
formData.append('image', imageFile);
formData.append('metadata', JSON.stringify({ title: 'example' }));

await fetch('/api/upload', {
method: 'POST',
body: formData,
// 不需要設定 Content-Type,瀏覽器會自動帶上 boundary
});

好處:

  • 更適合傳多張圖與大檔
  • 比較不容易因為 payload 太大或格式處理而失敗
  • 對「多參考圖的複雜編輯」穩定性通常會明顯提升

選擇依據

情境建議方式
單張小圖(< 100KB)、資料簡單JSON + base64 仍可接受
多張圖、或圖片 > 200KB改用 multipart/form-data
有代理/閘道器(API Gateway、Nginx)優先 multipart,避免 payload 大小限制
需要和其他欄位一起送multipart 更彈性(可混合文字欄位和檔案欄位)