Postman选择form-data后会自动设置合法Content-Type并生成boundary,手动添加易出错;字段名须与后端严格一致,上传多文件需用不同Key或规范数组语法files[]。

Postman 里根本不用手动设 Content-Type,设了反而容易错
Postman 在你选择 form-data 作为 Body 类型后,会自动构造合法的 multipart/form-data 请求体,并动态生成唯一的 boundary 字符串——这才是服务器能正确解析的关键。如果你在 Headers 里手动添加 Content-Type: multipart/form-data,却没带 boundary=...,或者写错了格式(比如漏了分号、空格不规范),服务器就会拒绝解析,常见报错是 Current request is not a multipart request 或直接 500。
所以:除非接口文档明确要求你传一个固定 boundary(极少见),否则Headers 里不要碰 Content-Type,让它保持空白。
- ✅ 正确做法:Body → 选
form-data→ 添加字段 → 类型选File→ 点按钮选文件 - ❌ 错误做法:Headers 里加一行
Content-Type: multipart/form-data,还自以为“更规范” - ⚠️ 注意:如果已手动设置过,发送前务必删掉该 Header,否则 Postman 不会覆盖,而是和自动生成的冲突
file 字段名必须和后端约定一致,大小写和下划线都不能错
很多上传失败不是因为格式问题,而是字段名对不上。比如后端 Spring Boot 接口写的是 @RequestParam("avatar") MultipartFile file,那你在 Postman 的 Key 栏就必须填 avatar,而不是 file、image 或 Avatar。
常见陷阱:
- 后端用
files[]接收多个文件 → Postman 的 Key 必须写成files[],不能只写files - 字段名含中文或特殊字符 → 后端框架(如 Express)可能默认不支持,建议全用英文+下划线
- 上传图片但后端校验
Content-Type→ 你选的文件后缀(如.jpg)必须匹配实际二进制内容,否则某些框架会拒绝(比如传了个 .png 后缀但其实是文本)
上传多个文件时,Key 不要重复,也不要用数组语法“骗”后端
Postman 的 form-data 不支持像前端 JS 那样用同一个 Key 传多个 File 值(它只会取最后一个)。想传多张图,必须用不同 Key,比如 image1、image2;或者后端明确支持数组式接收(如 files[]),那 Key 就统一写成 files[],然后在 Value 栏点选文件时按住 Ctrl/Meta 多选。
Postman 12.27.7 Windows x64 官方安装包,适用于 API 设计、调试、测试与协作。该系列包含 Enterprise 云端性能测试静态 IP 出口能力,以及接口规范标签管理改进,适合受限网络测试与规范资源组织场景。
关键区别:
-
files[](带中括号)→ 后端需显式声明接收数组,如 Spring Boot 的@RequestParam("files[]") MultipartFile[] files -
files(无括号)→ 即使你多选,Postman 也只发一个文件,另一个被丢弃 - 多个独立 Key(如
cover、thumbnail)→ 最稳妥,兼容性最强,适合字段语义明确的场景
调试时怎么看 Postman 实际发了什么?重点盯 boundary 和 Content-Disposition
当上传失败又看不出原因,别只看响应体。点 Postman 右上角的 Code 按钮(或发送后点 … → Copy Request As → cURL (bash)),粘贴到编辑器里看原始请求体。你会看到类似:
------WebKitFormBoundary7MA4YWxkTrZu0gW Content-Disposition: form-data; name="avatar"; filename="me.jpg" Content-Type: image/jpeg <binary data> ------WebKitFormBoundary7MA4YWxkTrZu0gW--
这里真正决定成败的只有两处:
-
name="avatar"→ 必须和后端字段名完全一致 -
filename="me.jpg"→ 文件名不能为空,且后缀应与实际类型匹配(比如传 PDF 却写.jpg,部分后端会拦截)
如果你在 cURL 里看到 Content-Type: multipart/form-data 后面没跟 boundary=...,说明你手动设置了错误的 Header;如果 boundary 字符串前后不闭合(缺结尾的 --),基本是 Postman 内部 bug,重启或换新 Tab 重试即可。
边界值这种细节,平时不用管,但出问题时,它就是唯一真相来源。

















