Multipart/Form-Data 实战:如何用 n8n 将本地文件上传到第三方 API?

2026-01-22 13 0

还在手动传文件?你的双手值得更高级的玩法

笔者在 N8N大学 社区里潜水时,发现很多同学都有个共同的烦恼:手里有一堆本地文件(比如图片、CSV报表、PDF文档),需要定期上传到某个第三方平台或系统里。操作很简单,就是打开网页,点击上传,选中文件,等待... 周而复始,枯燥且低效。

Multipart/Form-Data 实战:如何用 n8n 将本地文件上传到第三方 API?

更痛苦的是,有时候 API 接口还要求你把文件塞进 Multipart/Form-Data 这种格式里传输。对于不懂编程的朋友来说,这简直是天书。别怕,今天笔者就带大家硬核拆解:如何用 n8n 这把瑞士军刀,把本地文件自动上传到第三方 API。

核心概念:什么是 Multipart/Form-Data?

咱们不说教科书定义。你可以把 Multipart/Form-Data 想象成一个“快递包裹”。当你需要寄送一个实体物品(文件)的同时,还要附带一张写着收件人信息的便签(文本参数)。

普通的 HTTP 请求就像是寄信,只能写纯文字。而 Multipart/Form-Data 就像是快递,能把文件(二进制数据)和其他参数(比如文件名、ID)打包在一起发送。绝大多数涉及文件上传的 API,比如钉钉/飞书机器人发文件、OSS 上传、图床接口,都依赖这种格式。

准备工作:硬性条件检查

在开始之前,请确保你手头有以下资源:

  • 一个正在运行的 n8n 实例:可以是云端的,也可以是本地搭建的。
  • 一个测试用的 API:为了演示,笔者建议使用 https://httpbin.org/post。这是一个专门用来测试 HTTP 请求的网站,它会把你发送的数据原样返回,非常适合调试。
  • 一个本地文件:随便找张图片或者文本文档放在桌面上备用。

核心实操:三步搞定文件上传

我们将通过三个核心节点完成这个流程:**读取二进制文件** -> **设置参数** -> **发送 HTTP 请求**。

步骤 1:读取本地文件 (Read Binary File)

首先,我们需要告诉 n8n 去哪里找文件。

  1. 新建一个 Workflow,添加 Read Binary File 节点。
  2. 在参数 File Location 中,填入你本地文件的绝对路径。比如 Windows 可能是 C:Users你的用户名Desktoptest.jpg,Mac/Linux 可能是 /Users/你的用户名/Desktop/test.jpg
  3. 点击 Execute Node 确保节点变绿,这说明 n8n 已经成功读取了二进制数据。

步骤 2:配置 HTTP 请求 (HTTP Request)

这是最关键的一步。很多新手会直接把上一步的二进制数据连到 HTTP 节点,结果报错。正确姿势是手动构建 Multipart。

  1. 添加 HTTP Request 节点,连接在 Read Binary File 之后。
  2. Method 选择 POST
  3. URL 填入 https://httpbin.org/post
  4. Body Content Type 下拉菜单中,务必选择 multipart/form-data
  5. 你会看到下方出现了一个 Multipart Form Data 的数组设置。这里就是“打包”的地方。

步骤 3:构建 Multipart 数据 (关键参数)

Multipart Form Data 部分,我们需要添加条目:

  • 第一条目(文件)
    • Parameter Name: 填入 API 文档里要求的文件参数名,通常是 fileuploadbinary。这里我们填 file
    • Parameter Type: 选择 Binary
    • Binary Property: 这里要填入上一步 Read Binary File 节点输出的字段名,默认是 data
  • 第二条目(如果需要附加参数)
    • Parameter Name: 比如 filename
    • Parameter Type: 选择 Text
    • Value: 填入 test.jpg

设置好后,点击 Execute Workflow。如果看到 HTTP Request 节点变绿,并且返回了 files 对象里包含你的文件数据,恭喜你,你已经掌握了文件上传的精髓!

避坑指南:实战中的拦路虎

虽然流程看起来很简单,但笔者当年也踩过不少坑。这里分享两个最常见的问题:

1. “Binary Property” 填错了:在 Multipart Form Data 设置中,Binary Property 这一栏填写的不是文件路径,而是**上一个节点输出流中的字段名**。如果你在 Read Binary File 里没改名字,默认就是 data。如果你用的是 Read Binary Load 节点,输出可能是 binary。只要这里对不上,API 就会报错说没收到文件。

2. API 的“隐形”要求:有些 API 除了文件,还要求必须传递一个 Content-Type 头在文件 part 里(比如 image/png)。在 n8n 的 Multipart 设置里,你可以添加一个额外的条目,Parameter Name 填 Content-Type,Parameter Type 填 Text,Value 填对应的 MIME 类型。不过大多数情况下,n8n 会自动处理,如果遇到奇葩 API,记得检查这一点。

FAQ 问答

Q1: 为什么我上传后 API 提示 "Invalid File"?
A: 最常见的原因是 Binary Property 字段名填错,或者文件读取节点根本没执行成功(数据流为空)。建议在 HTTP Request 节点前加一个 Set 节点或 No-Op 节点,先把数据打印出来看看。

Q2: Multipart/Form-Data 里的 Parameter Type 什么时候选 Binary,什么时候选 Text?
A: 只要是上传文件本身,必须选 Binary。如果是随文件一起发送的附加信息(如文件名、Token、签名),统一选 Text

Q3: n8n 可以上传大文件吗?比如 100MB 的视频?
A: 取决于你的 n8n 部署环境。如果你是用 Docker 部署的,默认可能有 2MB 或 16MB 的 Body 限制。你需要修改 Nginx 或 Docker 容器的配置,增加 client_max_body_size。如果是 SaaS 版本,通常有配额限制。

总结与资源

掌握了 Multipart/Form-Data 的处理,你的 n8n 自动化能力就从简单的“数据搬运”升级到了“文件处理”的维度。无论是自动备份截图、批量上传报表,还是构建自己的图床系统,这都是必不可少的一环。

如果你在实操中遇到了具体的报错,欢迎在 N8N大学 社区发帖,笔者会第一时间帮你排查。下期我们聊聊 "如何处理复杂的 JSON 结构解析",敬请期待!

相关文章

n8n Wait节点在数据同步中的延迟控制实战
n8n Wait节点免费版:我能用它实现定时任务吗?
n8n Error Handling节点:当自动化流程“翻车”时,如何让它自动“扶起来”?
n8n Error Handling节点报错常见问题解决
当n8n流程意外中断,Error Handling节点如何配置才能优雅降级?
n8n Error Handling节点和Try/Catch节点,到底该怎么选?

发布评论