根本原因是Postman将同名File字段合并为单个请求体片段,仅保留最后一行所选文件;需用同一Key多选文件或不同Key名才能让后端收到多个独立文件。

Postman里多个File字段为什么后端只收到一个
根本原因不是后端漏解析,而是Postman把多个同名Key的File字段合并成了单个请求体片段——它按字段名(Key)分组,而不是按行数。如果你在form-data里加了三行Key都叫files、类型都是File,Postman只会取最后一行选中的文件,前两行被静默丢弃。
- Spring Boot等框架接收到的
MultipartFile[]或List,长度为1,不是因为解析失败,而是请求体里确实只有一个files部分 - 抓包看真实请求体,你会发现只有一个
Content-Disposition: form-data; name="files"; filename="a.jpg"块,后面没重复块 - 这和HTML表单的
行为一致:浏览器也只发一个multipart part,但内容是多文件拼接的二进制流;而Postman不模拟这种拼接,它只认“单行单文件”
如何让后端收到多个独立文件
必须用不同Key名,不能靠重复添加同名File字段。后端能否接收多个文件,取决于它声明的参数名是否匹配这些Key,以及是否用了集合类型接收。
- 在Postman的form-data中,逐行添加:第一行Key填
file1、类型File、选文件A;第二行Key填file2、类型File、选文件B;第三行Key填file3、类型File、选文件C - 后端接口需对应写成:
@RequestParam("file1") MultipartFile f1、@RequestParam("file2") MultipartFile f2……或者统一用@RequestParam List但前提是所有Key名完全一致且前端发的是标准multiple语义(Postman不支持)files - 更稳妥的做法是后端接收
@RequestParam("files") List,而Postman只填**一行**Key为files,然后在Value右侧点Select Files时**按住Ctrl或Shift多选多个文件**——这时Postman会把它们打包进同一个multipart part,符合RFC 7578对filename参数可重复的定义
常见配置错误与对应现象
很多“收不到多个文件”的问题,其实卡在边界条件上,比如字段名大小写、Content-Type干扰、空文件占位。
Postman 12.27.7 Windows x64 官方安装包,适用于 API 设计、调试、测试与协作。该系列包含 Enterprise 云端性能测试静态 IP 出口能力,以及接口规范标签管理改进,适合受限网络测试与规范资源组织场景。
- Key名大小写不一致:接口文档写
Files,你填files→ 后端收不到,日志报Required request part 'Files' is not present - 混用Text和File类型:同一Key名,一行设为Text、一行设为File → Postman只发Text那行,File被忽略,后端收到空字符串而非文件
- 点了
Select Files但没真正选中任何文件 → 请求体里仍带一个filename=""的空part,后端拿到MultipartFile对象但getSize() == 0、getOriginalFilename()为空 - 手动设置了
Content-Type: multipart/form-dataHeader → 这会覆盖Postman自动生成的带boundary的值,导致整个请求体无法解析,后端直接报400或跳过文件解析逻辑
验证请求体是否真含多个文件
别只信Postman界面显示,要确认实际发出的字节流。最简单的方法是点右上角Code按钮,选curl (bash),看生成的命令里有没有多个-F参数。
- 正确多文件(同Key):应看到类似
-F "files=@/path/a.jpg" -F "files=@/path/b.png"—— 两个-F用相同key,curl会自动拼成合法multipart - 错误单文件(同Key多行):只有一行
-F,哪怕你在Postman里加了三行,代码生成器也只取最后一行 - 如果
Code面板里没出现-F,说明Postman根本没把那一行识别为文件上传(可能是类型没选File,或路径无效)
真正容易被忽略的是:Postman的“多选文件”功能依赖操作系统API,某些沙盒环境(如Linux Wayland桌面、Mac的某些安全策略)下可能静默失败,界面显示已选但实际未绑定。遇到这种情况,换路径纯英文、无空格的文件重试,比调后端代码更快定位问题。










