还在手动压缩文件?你的工作流该“瘦身”了
笔者见过太多朋友每天在电脑前做着重复劳动:把一堆报告拖进文件夹,右键,压缩,命名,再上传到某个地方。有时候文件多了,漏掉一两个是常事,还得时刻担心是不是忘了打包。这种机械的“体力活”,不仅消耗精力,更是对专业能力的浪费。
在 N8N大学,我们信奉一个原则:凡是重复的,就应该交给机器。今天,笔者就带大家彻底搞定 n8n 中的文件压缩与解压问题。无论你是要每天打包日志发给团队,还是解压上传的报表进行分析,掌握 Compression 节点,就是你自动化进阶的第一步。
核心武器:Compression 节点初探
n8n 的 Compression 节点就像一个万能的压缩/解压工具箱,它原生支持 ZIP 和 GZIP 格式。它不仅能处理普通的文件,还能直接处理二进制数据流(Binary Data),这意味着你可以把 API 下载的内容直接打包,中间完全不需要落地保存。
虽然标题主要讲压缩,但笔者必须提醒大家,解压操作在日常自动化中同样重要。比如用户上传了一个压缩包,你需要解压里面的 CSV 进行数据清洗,这时候 Compression 节点的 “Unzip” 模式就派上用场了。
实战一:创建 ZIP 压缩包(从文件到二进制)
这是最常见的场景:把几个文件打包成 ZIP,然后通过邮件或即时通讯工具发送出去。
第一步:准备文件源
通常,文件可能来自 Google Drive、S3 或者本地的 Read Binary File 节点。假设我们已经获取到了 3 个文件的二进制数据。在 n8n 中,为了方便后续处理,建议使用 Set 节点将这些文件数据归类,例如设置 `file1`, `file2` 这样的字段名。
第二步:配置 Compression 节点
拖入 Compression 节点,模式选择 ZIP。这是最关键的一步:
- Operation: 选择
Compress(压缩)。 - Binary Data: 设为
True。因为我们处理的是文件流。 - File Name: 输入你想要的压缩包名称,例如
Daily_Report.zip。 - Options -> Files: 这里是一个数组。你需要输入类似
[{"fileName": "report_a.pdf", "data": "{{$binary.[你的字段名]}}"}]的格式。注意,这里的 data 必须引用具体的二进制数据路径。
配置完成后,点击执行,节点就会输出一个名为 Daily_Report.zip 的二进制文件。
第三步:发送压缩包
现在,你可以把输出的二进制数据直接喂给 Telegram、Slack 的发送文件节点,或者 Email 节点作为附件发送。
实战二:解压 ZIP 包(数据清洗前置)
假设你有一个工作流,用户通过 Webhook 上传了一个包含多个 Excel 表格的 ZIP 包,你需要提取里面的表格并写入数据库。
操作逻辑非常简单:
- 接收文件:使用 Webhook 节点接收二进制文件。
- 解压:使用 Compression 节点,模式设为
UNZIP。 - 输出:节点会自动将 ZIP 包内的所有文件解析出来,输出一个多条目的数据流。
你可以直接在后面连接 Spreadsheet File 节点,利用 n8n 的“批量处理”(Split Out)功能,一次性将所有解压出来的 Excel 文件转换为 JSON 数据。
避坑指南:笔者亲测的两个“拦路虎”
虽然 Compression 节点很强大,但在实际项目中,笔者踩过两个坑,分享给大家:
1. 内存溢出(Out of Memory)
如果你尝试压缩一个几个 G 的超大文件,或者一次性压缩几千个小文件,n8n(尤其是 Docker 部署的)可能会直接报内存错误。这是因为 n8n 处理二进制数据时会占用大量内存。
解决方案:尽量避免在 n8n 内部处理超大文件。对于超大文件,建议使用命令行工具(如 Rclone 或直接在服务器上写脚本)处理,n8n 只负责调度。
2. 文件名乱码或路径丢失
在解压某些在 Windows 上生成的 ZIP 包时,偶尔会出现中文文件名乱码。
解决方案:Compression 节点本身对编码的控制有限。如果遇到这种情况,通常是因为源文件的编码格式不标准。最好的习惯是:在文件源头(生成文件时)就统一使用 UTF-8 编码命名。
FAQ 问答
Q1: Compression 节点支持 7z 或 RAR 格式吗?
A: 不支持。 目前 n8n 的 Compression 节点仅原生支持 ZIP 和 GZIP 格式。如果你的业务必须处理 RAR 或 7z,你可能需要通过 SSH 节点连接服务器执行命令行工具,或者寻找支持这些格式的第三方 API 节点。
Q2: 我可以直接压缩文件夹吗?
A: 间接支持。 Compression 节点是基于文件流的。如果你需要压缩文件夹,通常需要先遍历该文件夹下的所有文件(使用 Google Drive List 或 HTTP Request 获取列表),然后将这些文件的数据放入一个数组中,再传给 Compression 节点进行打包。
Q3: 压缩后的文件存放在哪里?
A: 内存中。 默认情况下,压缩包只存在于当前工作流运行的内存里。如果你需要永久保存,必须在 Compression 节点后添加 Google Drive、Write Binary File 或 S3 节点将其落地保存。
总结与资源
文件打包与解压是自动化流程中连接“外部数据”与“内部处理”的重要桥梁。Compression 节点虽然配置简单,但蕴含着处理二进制数据的强大能力。
如果你想学习更多关于 n8n 处理文件的高级技巧,欢迎关注 N8N大学(n8ndx.com)。在这里,我们不讲空话,只分享最硬核的实战经验。