Postman测试文件上传失败主因是form-data的Key与后端@RequestParam名不一致或手动设置Content-Type干扰boundary;Key必须完全匹配参数名,且Content-Type应由Postman自动生成。

Postman 测试文件上传接口失败,八成是 form-data 的 Key 没对上后端接收参数名,或者手动填了 Content-Type 干扰了 Postman 自动构造的 boundary。
Key 必须和后端 @RequestParam 或参数名完全一致
EasyExcel 导入接口通常写成类似 @RequestParam("file") MultipartFile file 或直接用 MultipartFile file(依赖 Spring 的参数名推断)。Postman 中的 Key 字段必须一字不差地匹配这个字符串:
- 后端是
@RequestParam("excelFile")→ PostmanKey填excelFile - 后端方法签名是
upload(@RequestParam MultipartFile data)→Key必须是data,不是file也不是uploadFile - 多文件场景如
@RequestParam("files") List→files Key是files,且需点两次“Select Files”选多个,或拖入多个文件 - Key 类型选 “File”,不是 “Text”——选错会导致后端收到空对象,
MultipartFile.isEmpty()返回true
别碰 Content-Type,让 Postman 自动生成 boundary
multipart/form-data 请求必须带 boundary,它是分隔字段的唯一标识符。Postman 在你选 form-data 后会自动设置 Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryxxx。手动填写会导致:
- 填错格式(比如漏掉
boundary=或引号)→ 415 Unsupported Media Type - 填了静态值(如
multipart/form-data; boundary=abc)→ 若请求体里实际用了别的 boundary → 服务端解析失败,EasyExcel 报IllegalArgumentException: Stream is not an OLE2 stream(误判为损坏 Excel) - Headers 标签页里删掉所有手动加的
Content-Type,只留Authorization和Accept等必要头
EasyExcel 场景下要特别注意文件后缀和 MIME 类型
EasyExcel 对 .xlsx 和 .xls 解析逻辑不同,且部分 Spring 配置会校验 Content-Type。Postman 选文件时会自动设 Content-Type,但可能不准:
Postman 12.27.7 Windows x64 官方安装包,适用于 API 设计、调试、测试与协作。该系列包含 Enterprise 云端性能测试静态 IP 出口能力,以及接口规范标签管理改进,适合受限网络测试与规范资源组织场景。
- 上传
.xlsx却被识别为application/vnd.openxmlformats-officedocument.spreadsheetml.sheet→ 正常 - 上传
.xlsx却被识别为application/octet-stream→ 多数情况不影响 EasyExcel,但若后端有MultipartFile.getContentType().startsWith("application/vnd")校验就会拦截 - 上传
.xls被识别为application/vnd.ms-excel→ 正常;若识别成text/plain→ EasyExcel 初始化失败,抛ExcelDataConvertException - 解决办法:用真实 Excel 文件测试,避免用文本编辑器另存为的“伪 Excel”;必要时在 Pre-request Script 里用 JS 临时改 MIME(不推荐,仅调试用)
上传大文件或批量导入时容易触发 Spring Boot 默认限制
Spring Boot 2.0+ 默认单文件上限 1MB、总请求体 10MB。上传 5MB 的 Excel 很可能卡在网关或直接 400:
- 错误现象:
400 Bad Request+ 日志出现Maximum upload size exceeded - 本地调试可在
application.properties加两行:spring.servlet.multipart.max-file-size=50MBspring.servlet.multipart.max-request-size=50MB - 生产环境别硬调大,应配合 Nginx 的
client_max_body_size一起改,否则请求根本到不了 Spring - EasyExcel 本身无大小限制,但内存占用随文件行数线性增长;10 万行以上建议加
readSheet(0).headRowNumber(1)显式指定表头行,避免反复扫描
真正卡住人的往往不是“怎么点”,而是 Key 名拼错半角/全角、复制粘贴带空格、或是以为改了 Headers 就万事大吉——boundary 一旦被手动干预,整个 multipart 结构就废了。测之前先 curl 看一眼原始请求体长什么样,比盲点十次更省时间。










