這一章我們要進入「系統級」的處理。時間校對、個人隱私保護以及檔案壓縮,這些看起來像是雜事,但卻是區分「業餘玩家」與「專業架構師」的分水嶺。

學習目標 (Goal)

  • 搞懂 Date & Time (時間管理):學會處理複雜的時區轉換與時間計算。

  • 掌握 Crypto (隱私安全):使用雜湊、加密技術保護敏感的資料 Item。

  • 理解 Compression (檔案處理):處理大量檔案時的封裝與解壓策略。

  • 掌握 Convert to File (格式橋接):將 JSON 轉成 binary,供 Compression 等節點使用。

  • 建立自動化流程中的「安全性」與「效能優化」意識。


核心觀念 (Concepts)

Date & Time:解決時區與格式的噩夢

日期絕對是新手最常踩的坑。不同系統串接時,時間格式往往不統一。掌握時區轉換與「時間差計算」(例如:計算訂單到現在過了幾小時),能讓你的流程具備時效感知能力。

Crypto:隱私安全的最後防線

在處理 Item 時,我們有義務保護敏感資訊(如個資、金鑰)。透過雜湊(Hashing)處理,你可以確保在顯示 Log 或除錯時,不會洩漏真實的客戶隱私。

Compression:檔案處理大師

當一次要處理 100 張照片或大量 CSV 時,直接傳輸會耗費極大頻寬。學會將 Item 打包成 .zip 或解壓縮文件,是專業自動化流程的標配。

Convert to File:JSON 與 Binary 的橋樑

Compression 等節點只接受 binary 輸入。當你的資料是 JSON 時,Convert to File 能將 JSON 轉成 binary 檔案(如 .json),讓後續的壓縮、上傳或下載得以進行。


節點配置 (Node Setup)

Date & Time Node

  • Operation:支援多種操作:Add to a Date(加時間)、Subtract From a Date(減時間)、Get Time Between Dates(計算兩時間差)、Get Current Date(取得當前時間)、Format a Date(轉換格式)、Extract Part of a Date(擷取年月日等)、Round a Date(四捨五入至最近單位)。

  • Add / Subtract:需指定 Duration(數量)、Time Unit(秒/分/時/日/週/月/年)、Date to Add ToDate to Subtract From(可用 Expression 如 {{ $now }})。

  • Format a Date:可選預設格式(如 YYYY-MM-DDYYYY/MM/DD)或 Custom Format(使用 Luxon 的 formatting tokens)。

  • Get Time Between Dates:可選多個 Units(毫秒/秒/分/時/日/週/月/年),輸出可為各單位數值或 ISO duration 字串(如 P1Y3M13D)。

  • Output Field Name:各操作皆需指定輸出欄位名稱。Include Input Fields 可選擇是否保留輸入欄位。

  • Timezone:依 n8n 實例或 Workflow 設定;Get Current Date 可單獨指定 Timezone。

Crypto Node

  • ActionHash(雜湊)、Hmac(金鑰雜湊)、Sign(私鑰簽章)、Generate(產生隨機字串)。

  • Hash:選 Type(MD5、SHA256、SHA384、SHA512、SHA3-256/384/512)、Value(要雜湊的文字,可用 Expression)。可開啟 Binary File 改從 binary 欄位讀取。

  • Encoding:Hash 與 Hmac 可選 HEXBASE64 作為輸出格式。

  • Hmac:需額外填入 Secret(金鑰),適用於驗證資料完整性與來源。

  • Generate:可產生 UUIDHEXBASE64ASCII 格式的隨機字串。

Convert to File Node

  • Operation:選 Convert to JSONtoJson)將輸入的 JSON Item 轉成 binary 檔案。

  • ModeEach Item to Separate File(每筆一檔)或 All Items to One File(合併為單檔)。

  • OptionsFile Name 可指定輸出的檔名;Encoding 預設 utf8;Format 可格式化 JSON 便於閱讀。

  • 輸出:binary 預設寫入 data 欄位,可作為 Compression 的 Input Binary Field(s) 來源。

Compression Node

  • OperationCompress(壓縮)或 Decompress(解壓縮)。支援 ZipGzip 格式。

  • CompressFile Name 為輸出的檔名(Zip 建議 .zip、Gzip 建議 .gz);Output Format 選 Zip 或 Gzip;Input Binary Field(s) 指定要壓縮的 binary 欄位(多檔用逗號分隔);Put Output File in Field 指定輸出寫入的欄位名稱。

  • DecompressInput Binary Field(s) 指定要解壓的檔案;Output Prefix 可為解壓後的檔名加前綴。


專業操作 (Action)

Step 1: 訂單日期格式化與 Email 脫敏備份

建立一個整合流程:從模擬訂單出發,格式化日期、對 Email 脫敏,最後壓縮成檔名含日期與 Hash 的 zip 檔。

  1. Set 產生模擬訂單(emailorder_date)。
  2. Date & Time(Format Date)將 order_date 格式化為 yyyy-MM-dd
  3. Cryptoemail 做 SHA-256 Hash,產出脫敏後的指紋。
  4. Merge(Combine by Position)將 Format Date 與 Hash Email 的輸出合併。
  5. Convert to File(Convert to JSON)將合併後的 JSON 轉成 binary。
  6. Compression 壓縮 binary,檔名以「日期-Hash」組合(如 2026-01-01-<hash>.zip)。

實戰挑戰 (Challenge)

訂單日期格式化與 Email 脫敏(整合 Date & Time、Crypto、Convert to File、Compression)

  1. Mock Data(Set):產生一筆模擬訂單,欄位含 email(如 user@example.com)、order_date(如 2026-01-01)。
  2. Date & Time(Format Date):讀取 order_date,使用 Format a Date 產出 formattedDate(如 yyyy-MM-dd)。
  3. Crypto(Hash Email):對 email 做 SHA-256 Hash,產出 data 欄位,完成脫敏。
  4. Merge:用 Merge 節點(Combine by Position)將 Format Date 與 Hash Email 的輸出合併成一個 Item。
  5. Convert to File:選 Convert to JSONtoJson)將合併後的 JSON 轉成 binary,寫入 data 欄位。
  6. Compression:壓縮 data 欄位,File Name 可用 Expression 組合日期與雜湊作為檔名,例如 {{ $('Format Date').item.json.formattedDate + "-" + $('Hash Email').item.json.data + ".zip" }}

NOTE

Compression 基本功能:Compress 操作必須從 Input Binary Field(s) 指定包含 binary 檔案的欄位。Date & Time 與 Crypto 只輸出 JSON,沒有 binary,故需先經 Convert to File 轉成 binary 才能壓縮。


IMPORTANT

處理個人資料(如 PII)時,請務必嚴格遵守相關法規(如 GDPR),能加密就不留明文,這是架構師的底線。


TIP

n8n 的 Date & Time 節點底層是 Luxon,如果你需要執行更複雜、更細膩的時間運算,可以在後續章節學習如何透過 Code 節點調用完整的 Luxon 函式庫。


範例 (Example)

可依序匯入 chapter-10-date-crypto-compression-part1.jsonpart2part3 進行分段練習。part3 為實戰挑戰的完整工作流(Mock Data → Format Date + Hash Email → Merge → Convert to File → Compression,檔名以日期與 Hash 組合)。下方為基礎 Compression 範例(下載圖片+壓縮):