spring boot 2 升级到 spring boot 3 后文件上传失败

背景

项目需要,要求升级 spring boot 2.7 到 spring boot 3.2,升级过程中发现很多不兼容问题,下面说明文件上传失败的解决方案。

问题

spring boot 2 中不需要额外的配置,直接在 Controller 中配置 MultipartFile 接收页面传的文件即可,但是在 spring boot 3 中接收的文件参数为空。

问题一

排查的第一个问题就是文件流被其他 Filter 读取了,导致获取不到文件信息,但是 spring boot 2 也有这个 Filter,没有出现问题。

具体原因没有详细追究,解决方案就是在 Filter 中去掉对文件上传这个请求的处理。

问题二

CommonsMultipartResolver 不能用了。

如果有自定义操作,可以继承 StandardServletMultipartResolver,然后通过 @Component 注入到 spring bean 即可。

如果没有注入该对象,则在 org.springframework.web.servlet.DispatcherServlet.checkMultipart 中 multipartResolver 为 null。

问题三

还是获取不到文件对象。

追踪到 org.apache.catalina.connector.Request.parseParts 中,可以看到 MultipartConfigElement mce 为 null

继续查看这部分代码,发现 StandardWrapper 中 multipartConfigElement 是通过注解或者配置文件设置进去的。因此需要注入:MultipartConfigElement 对象进入,如下:

总结

以上就是升级 spring boot3 文件上传失败遇到的问题及解决方案。

相关推荐
sheji341610 分钟前
【开题答辩全过程】以 家庭教育资源网为例,包含答辩的问题和答案
java
百***787516 分钟前
Grok-4.1与GPT-5.2深度对比:技术差异、适用场景及Python集成指南
java·python·gpt
Mr -老鬼33 分钟前
Java VS Rust
java·开发语言·rust
北凉军41 分钟前
java连接达梦数据库,用户名是其他库的名称无法指定库,所有mapper查询的都是以用户名相同的库内的表
java·开发语言·数据库
程序员张31 小时前
Mybatis条件判断某属性是否等于指定字符串
java·spring boot·mybatis
wuk9981 小时前
基于C#与三菱PLC通过TCPIP实现MC协议通信示例
java·网络·c#
沛沛老爹1 小时前
Web转AI架构篇 Agent Skills vs MCP:工具箱与标准接口的本质区别
java·开发语言·前端·人工智能·架构·企业开发
码农小卡拉1 小时前
Maven与Gradle选型指南:如何匹配项目的依赖管理需求
java·gradle·maven
黎雁·泠崖1 小时前
吃透Java操作符进阶:算术+移位操作符 全解析(Java&C区别+完整案例+避坑指南)
java·c语言·python
Yu_iChan2 小时前
Day10 用户端订单模块
java