
關鍵設定只有一行
在你的環境變數中加入:
N8N_BINARY_DATA_MODE=default
然後 重啟 n8n。
就這樣,沒了。
N8N_BINARY_DATA_MODE 是做什麼用的?
n8n 處理 binary(圖片、PDF、音檔)其實有兩種模式:
- filesystem / filesystem-v2
👉 binary 存在磁碟
👉 workflow 裡只看到一個 reference
👉 你會看到那個熟到不能再熟的filesystem-v2 - default
👉 binary 直接以 Base64 存在 execution data
👉 Code node、Expression、HTTP Request 全都拿得到
也就是說——
只要設成 default,你原本期待的這種資料結構就會回來:
{
"binary": {
"data": {
"data": "iVBORw0KGgoAAAANSUhEUgAA..."
}
}
}
而不是:
"filesystem-v2"
實務上怎麼設定?
Docker / Docker Compose
environment:
- N8N_BINARY_DATA_MODE=default
改完記得 重啟 container,不然不會生效。
本機或 Server(.env)
N8N_BINARY_DATA_MODE=default
n8n Cloud 用戶請注意
這一招 在 n8n Cloud 用不了。
- Cloud 版 不能改環境變數
- filesystem-v2 是 Cloud 的強制行為
如果你用的是 Cloud,請使用下面提到的
Extract From File / Convert to File 流程。
方法 1:用 Extract From File 節點
這是社群推薦最簡單的方法。做法是:
- 用 HTTP Request 或 Webhook 取得圖片(一樣有 binary)
- 接上 Extract From File 節點
- 在 Extract From File 裡選擇把檔案轉成 Base64 輸出
這樣最後輸出的資料就是真正的 Base64,而不是 filesystem-v2 的 placeholder。
方法 2:用 Convert to File 搭配 Extract
在 n8n Cloud 裡,有人發現 Move Binary Data node 目前不見了(Cloud 版沒有),取而代之可以:
- 用 Extract From File 先把檔案轉成 Base64
- 用 Convert to File(Move Base64 String to File)重新產生可運作的 binary
- 再送到下游 API
這其實是「轉一次 Base64 → 再轉回 binary → 再送出」的 workaround。
為什麼我會說環境變數是「最簡單解法」?
因為它一次解決這些煩惱:
- 不用多接節點
- 不用寫 fs.readFile
- 不用猜 binary 存在哪
- 不用跟 filesystem-v2 鬥智鬥勇
你可以直接在 Code node 寫:
$binary.data.data
然後它真的就是 Base64。
但也不是完全沒有代價
把 binary 直接塞進 execution data,代表:
- 記憶體使用量會上升
- 大檔案(超大 PDF / 影像)不一定適合
所以我的實戰建議是:
- 圖片 OCR / MMS / AI Vision → 非常適合
- 大檔案批次處理 → 請三思
總結
如果你是自架 n8n,又常需要把圖片轉 Base64 傳給 API,
直接把N8N_BINARY_DATA_MODE設成default,
是目前最乾淨、最不容易踩雷的解法。
