解决SpringBoot中MultipartResolver和ServletFileUpload的冲突问题
作者:wmy_0707 时间:2023-10-22 15:28:19
MultipartResolver和ServletFileUpload冲突
如果同时使用了MultipartResolver 和ServletFileUpload,就会在iter.hasNext()返回false.然后整个循环就跳出去了。
整个问题产生的原因是Spring框架先调用了MultipartResolver 来处理http multi-part的请求。这里http multipart的请求已经消耗掉。后面又交给ServletFileUpload ,那么ServletFileUpload 就获取不到相应的multi-part请求。
1.首先spring boot默认会调用MultipartResolver
来处理http multi-part的请求,须在配置文件中把spring.http.multipart.enabled=false。这样就不会默认调用MultipartResolver。
2.需要重写一个MyMultipartResolver
重写isMultipart方法
package dc.platform.admin.common.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import javax.servlet.http.HttpServletRequest;
@Configuration
public class MyMultipartResolver extends CommonsMultipartResolver {
/**
* 这里是处理Multipart http的方法。如果这个返回值为true,那么Multipart http body就会MyMultipartResolver 消耗掉.如果这里返回false
* 那么就会交给后面的自己写的处理函数处理例如刚才ServletFileUpload 所在的函数
* @see org.springframework.web.multipart.commons.CommonsMultipartResolver#isMultipart(javax.servlet.http.HttpServletRequest)
*/
@Override
public boolean isMultipart(HttpServletRequest request) {
// 过滤金格生成文书保存的接口 兼容MultipartResolver 或者 ServletFileUpload
if (request.getRequestURI().contains("mgt/document/upload")||request.getRequestURI().contains("/modules/document.html")) {
return false;
}
return super.isMultipart(request);
}
}
springMVC文件上传时出现的“坑”—multipartResolver
首先,页面代码,这里是upload.jsp:
<form action="${pageContext.request.contextPath}/upload" method="post" enctype="multipart/form-data">
姓名:<input type="text" name="name">
文件:<input type="file" name="multipartFile">
提交: <input type="submit" value="提交">
</form>
然后,我们在pom文件中添加文件上传用到的依赖文件:
<!--文件上传依赖-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
接着我们在spring-mvc.xml文件中配置文件上传解析器:
<bean id="commonsMultipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--上传文件总大小-->
<property name="maxUploadSize" value="54280"/>
<!--编码方式-->
<property name="defaultEncoding" value="UTF-8"/>
<!--单个上传的文件大小-->
<property name="maxUploadSizePerFile" value="54280"/>
</bean>
之后编写了文件上传代码:
@RequestMapping("/upload")
@ResponseBody
public void upload(String name, MultipartFile multipartFile) throws IOException {
System.out.println(name);
String filename = multipartFile.getOriginalFilename();
multipartFile.transferTo(new File("F:\\"+filename));
}
这个时候你以为万事大吉,可以成功运行的时候,惊喜出现了,页面给你来一个500…
idea控制台给你来个null
我把代码从头顺了一遍始终没找到我的错,于是乎,有技术朋友是真好!!!原来在文件解析器那里ID必须要配置为
multipartResolver
*哈哈,加粗是为了醒目~~~~*
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--上传文件总大小-->
<property name="maxUploadSize" value="54280"/>
<!--编码方式-->
<property name="defaultEncoding" value="UTF-8"/>
<!--单个上传的文件大小-->
<property name="maxUploadSizePerFile" value="54280"/>
</bean>
大家千万记得这个!
来源:https://blog.csdn.net/wmy_0707/article/details/84313488
标签:SpringBoot,MultipartResolver,ServletFileUpload
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
android教程之service使用方法示例详解
2023-05-08 03:48:21
改进c# 代码的五个技巧(一)
2021-07-17 23:49:30
![](https://img.aspxhome.com/file/2023/4/76404_0s.png)
C#修改及重置电脑密码DirectoryEntry实现方法
2021-12-03 05:08:16
Mybatis实现增删改查(CRUD)实例代码
2022-10-05 20:03:22
Android热修复及插件化原理示例详解
2023-03-07 01:37:52
![](https://img.aspxhome.com/file/2023/6/137176_0s.jpg)
Java中常用的6种排序算法详细分解
2022-01-08 20:19:18
浅谈C#泛型的用处与特点
2022-04-22 02:39:35
Java中Mybatis-Plus使用方式介绍
2021-11-14 05:49:56
深入了解Hadoop如何实现序列化
2023-10-13 10:33:43
![](https://img.aspxhome.com/file/2023/8/62348_0s.png)
Android开发中软键盘的显示和隐藏
2023-10-03 06:00:20
![](https://img.aspxhome.com/file/2023/3/138003_0s.jpg)
Netty分布式pipeline管道传播outBound事件源码解析
2022-10-17 23:43:06
![](https://img.aspxhome.com/file/2023/2/87342_0s.png)
C++实现LeetCode(205.同构字符串)
2023-06-21 04:06:54
Android使用DrawerLayout实现仿QQ双向侧滑菜单
2023-07-18 23:48:24
![](https://img.aspxhome.com/file/2023/1/137161_0s.gif)
C#利用Task实现任务超时多任务一起执行的方法
2023-07-04 20:03:38
Springboot+WebSocket实现一对一聊天和公告的示例代码
2022-06-16 11:32:33
Android CardView+ViewPager实现ViewPager翻页动画的方法
2022-10-19 00:44:57
![](https://img.aspxhome.com/file/2023/9/138689_0s.gif)
C#词法分析器之构造NFA详解
2022-04-10 02:11:43
![](https://img.aspxhome.com/file/2023/3/116623_0s.png)
在Android设备上搭建Web服务器的方法
2023-06-23 23:38:36
![](https://img.aspxhome.com/file/2023/9/82419_0s.gif)
DevExpress GridView自动滚动效果
2022-01-19 09:08:54
![](https://img.aspxhome.com/file/2023/4/102224_0s.gif)
C#预定义的基础类型转换
2023-08-13 03:14:16
![](https://img.aspxhome.com/file/2023/8/69788_0s.png)