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 文件上传失败遇到的问题及解决方案。

相关推荐
码事漫谈2 小时前
【精华】C++成员初始化列表完全指南:为什么、何时以及如何正确使用
后端
码事漫谈2 小时前
C++ 强制类型转换:类型安全的多维工具
后端
开心香辣派小星3 小时前
23种设计模式-15解释器模式
java·设计模式·解释器模式
Halo_tjn3 小时前
虚拟机相关实验概述
java·开发语言·windows·计算机
RainbowSea4 小时前
github 仓库主页美化定制
后端
摆烂z4 小时前
Docker与Jib(maven插件版)实战
java
RainbowSea4 小时前
从 Spring Boot 2.x 到 3.5.x + JDK21:一次完整的生产环境迁移实战
java·spring boot·后端
笨手笨脚の4 小时前
Spring Core常见错误及解决方案
java·后端·spring
奶油松果4 小时前
Springboot自动装配 - redis和redission
java·spring boot·redis
计算机毕设匠心工作室4 小时前
【python大数据毕设实战】全球大学排名数据可视化分析系统、Hadoop、计算机毕业设计、包括数据爬取、数据分析、数据可视化、机器学习、实战教学
后端·python·mysql