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

相关推荐
2401_858120261 分钟前
SpringBoot实现:星之语明星周边销售平台开发指南
服务器·spring boot·php
郑州吴彦祖77213 分钟前
【java】数据类型与变量以及操作符
java·intellij-idea
程序员大金14 分钟前
基于SpringBoot+Vue+MySQL的在线学习交流平台
java·vue.js·spring boot·后端·学习·mysql·intellij-idea
吹老师个人app编程教学19 分钟前
阿里巴巴_java开发规范手册详解
java·开发语言
天上掉下来个程小白19 分钟前
Stream流的终结方法(一)
java·windows
qq_25183645721 分钟前
基于SpringBoot vue 医院病房信息管理系统设计与实现
vue.js·spring boot·后端
天上掉下来个程小白41 分钟前
请求响应-08.响应-案例
java·服务器·前端·springboot
大白_dev42 分钟前
数据校验的总结
java·开发语言
武昌库里写JAVA42 分钟前
Vue3常用API总结
数据结构·spring boot·算法·bootstrap·课程设计
失落的香蕉1 小时前
Java第二阶段---10方法带参---第三节 面向对象和面向过程的区别
java·开发语言