为什么你的文件上传总是卡在第一步?
在 N8N 大学的社群里,我见过太多人被“文件上传”这个需求难住了。你可能已经写好了复杂的自动化流程,却在处理本地文件时发现:HTTP Request 节点默认只能发送文本数据,根本不知道怎么把一张图片或一份 PDF 塞进 API 的参数里。
手动上传再调用 API?这违背了自动化的初衷。笔者今天就带你硬核拆解这个过程,从本地文件到 API 调用,打通这最后一公里。
准备工作:你需要这些“弹药”
在动手之前,请确保你的环境已经就绪:
- n8n 实例:无论是云端版还是本地 Docker 部署均可。
- 一个支持文件上传的 API:为了演示,本文将使用一个通用的文件上传接口(你可以替换为阿里云 OSS、钉钉群机器人或任何支持
multipart/form-data的 API)。 - 待上传的文件:准备一张图片或一个 PDF 文件放在本地。
核心实操:3 步搞定文件上传
很多新手习惯直接在 HTTP Request 节点里拖拽文件,这是错误的。标准的流程是:读取文件 -> 组装数据 -> 发送请求。
步骤 1:使用 Read Binary File 节点读取文件
首先,我们需要将本地文件转换为二进制数据流。
- 添加一个 Read Binary File 节点。
- File Location:填写文件的绝对路径(例如:
C:UsersNameDocumentsavatar.jpg或/home/user/data/avatar.jpg)。 - 运行一次该节点,你会看到输出数据中包含了一个二进制数据块(Binary Data)。这是上传成功的关键基础。
步骤 2:配置 HTTP Request 节点(关键参数)
这是最容易出错的地方。添加一个 HTTP Request 节点,并按照以下逻辑配置:
- Method:选择
POST(大多数上传接口都用 POST)。 - URL:填写目标 API 的地址。
- Authentication:如果 API 需要 Token 或 Basic Auth,在这里配置。
- Body Content Type:**这里必须选择
multipart/form-data**。这是文件上传的标准格式,千万别选 JSON。 - Form Data:点击“Add Field”。
- Name:填写 API 文档中要求的文件参数名,通常是
file、upload或media。 - Parameter Type:选择 Binary(因为我们要传的是二进制流,不是文本)。
- Binary Property:输入
data(这是上一步 Read Binary File 节点默认输出的二进制属性名)。
- Name:填写 API 文档中要求的文件参数名,通常是
注意: 如果 API 还需要传递其他文本参数(如 userId),请继续添加字段,但记得将 Parameter Type 选为 Text。
步骤 3:测试与验证
连接 Read Binary File 的输出到 HTTP Request,点击执行。查看 HTTP Request 的输出结果。
- 如果返回
200 OK或包含文件 URL 的 JSON,恭喜你,上传成功! - 如果报错,通常是因为 Form Data 的字段名(Name)或参数类型(Parameter Type)设置错误。
避坑指南:笔者踩过的坑
在 N8N 大学的实战教学中,这两个坑出现频率最高:
1. 二进制属性名称不匹配
HTTP Request 节点中的Binary Property必须严格对应上游节点输出的二进制属性名。默认情况下,Read Binary File 输出的是data。但如果你使用了 Set 节点修改过数据流,属性名可能会变。务必在“Input”面板查看前一个节点的输出结构。
2. API 的 Content-Type 陷阱
有些老旧或非标准的 API 虽然要求上传文件,却固执地要求application/json。这种情况下,你无法直接使用 HTTP Request 上传文件。解决方案是先用 HTTP Request 获取上传凭证(如 OSS 的 Policy 和 Signature),再通过 n8n 的 Code 节点或外部脚本完成上传。遇到这种情况,先检查 API 文档的 Content-Type 定义。
FAQ 问答
Q1:我想上传整个文件夹里的所有文件,该怎么做?
A:n8n 原生节点不支持直接上传文件夹。你需要使用 Read Binary File 节点配合 Split Out 节点,或者编写一段简单的 JavaScript 代码(Code 节点)来遍历文件夹路径并将文件推入数组,最后通过循环(Loop Over)依次上传。
Q2:为什么我上传的文件在服务器端显示为 0KB?
A:这通常是因为 Form Data 中的 Parameter Type 错误地选择了 Text 而不是 Binary。请检查并修正该字段的设置。
Q3:HTTP Request 节点支持断点续传吗?
A:不支持。n8n 的 HTTP Request 节点是基于单次请求的。如果你需要上传超大文件(如 >100MB),建议配置 n8n 的环境变量(如 N8N_PAYLOAD_SIZE_LIMIT)来增加允许的负载大小,或者分片上传(这需要更复杂的逻辑,通常在 Code 节点中实现)。
总结与资源
掌握了 Read Binary File 与 HTTP Request (multipart/form-data) 的配合,你就打通了本地数据与云端交互的任督二脉。这不仅适用于文件上传,也是后续处理图片识别、OCR 等高级功能的基础。
如果你在实操中遇到具体的报错信息,欢迎在 N8N 大学(n8ndx.com)的评论区留言,笔者会亲自为你调试。