使用GridFS Template上传PDF到MongoDB时file参数缺失异常如何解决
异常原因
该异常表示Spring MVC没有从请求中解析到控制器方法要求的、名为file的必填文件参数,常见触发原因如下:
- 接口调用方发送请求时,文件对应的表单字段名和
@RequestParam("file")中指定的file不一致 - 请求未设置正确的Content-Type,文件上传请求必须使用
multipart/form-data类型,使用其他类型会导致Spring无法解析文件参数 - 上传文件大小超出了Spring默认的上传阈值,参数被框架直接丢弃
- 非Spring Boot的传统Spring MVC项目未主动注册MultipartResolver组件,无法解析multipart类型的请求
解决方案
可按以下顺序排查修复:
- 核对接口调用的参数名:
发送请求时,文件对应的表单key必须设置为file,和控制器注解里的参数名保持一致。如果允许文件参数非必填,可以修改注解配置关闭必填校验:@RequestParam(value = "file", required = false) MultipartFile file - 确认请求头配置:
调用接口时必须将请求头Content-Type设置为multipart/form-data,如果使用Postman等工具测试,直接在body栏选择form-data类型,新增key为file,类型切换为File后选择本地PDF文件即可。 - 调整文件上传大小限制:
在项目配置文件中添加以下配置,按需调整最大允许上传的文件大小:
如果是yaml配置:# application.properties配置 spring.servlet.multipart.max-file-size=20MB spring.servlet.multipart.max-request-size=50MBspring: servlet: multipart: max-file-size: 20MB max-request-size: 50MB - 注册MultipartResolver(仅传统Spring MVC项目需要):
在Spring配置类中添加MultipartResolver的Bean声明:@Bean public MultipartResolver multipartResolver() { CommonsMultipartResolver resolver = new CommonsMultipartResolver(); // 设置最大上传大小为20MB resolver.setMaxUploadSize(20 * 1024 * 1024); return resolver; }
内容的提问来源于stack exchange,提问作者Prasad Mayya
相关产品推荐
相关产品推荐

