n8n 處理圖片二進位資料時遇到 filesystem-v2 解法【n8n 進階篇】

如果你是 自架 n8n(Docker / VM / 本機), 其實 n8n 裡面提到的 Extract From File、Convert to File 那些 workaround通通都可以不用。 因為 n8n 本來就有提供一個「開關」, 可以直接決定 binary 要不要用 filesystem-v2。

關鍵設定只有一行

在你的環境變數中加入:

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 節點

這是社群推薦最簡單的方法。做法是:

  1. HTTP Request 或 Webhook 取得圖片(一樣有 binary)
  2. 接上 Extract From File 節點
  3. 在 Extract From File 裡選擇把檔案轉成 Base64 輸出

這樣最後輸出的資料就是真正的 Base64,而不是 filesystem-v2 的 placeholder。


方法 2:用 Convert to File 搭配 Extract

在 n8n Cloud 裡,有人發現 Move Binary Data node 目前不見了(Cloud 版沒有),取而代之可以:

  1. 用 Extract From File 先把檔案轉成 Base64
  2. 用 Convert to File(Move Base64 String to File)重新產生可運作的 binary
  3. 再送到下游 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
是目前最乾淨、最不容易踩雷的解法。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *