解决SpringBoot中MultipartResolver和ServletFileUpload的冲突问题

网友投稿 900 2022-11-28

解决SpringBoot中MultipartResolver和ServletFileUpload的冲突问题

解决SpringBoot中MultipartResolver和ServletFileUpload的冲突问题

目录MultipartResolver和ServletFileUpload冲突1.首先spring boot默认会调用MultipartResolver2.需要重写一个MyMultipartResolverspringMVC文件上传时出现的“坑”—multipartResolvermultipartResolver

MultipartResolver和Shttp://ervletFileUpload冲突

如果同时使用了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:

姓名:

文件:

提交:

然后,我们在pom文件中添加文件上传用到的依赖文件:

commons-fileupload

&ProHylt;artifactId>commons-fileupload

1.3.3

commons-io

commons-io

2.6

接着我们在spring-mvc.xml文件中配置文件上传解析器:

之后编写了文件上传代码:

@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

*哈哈,加粗是为了醒目~~~~*

大家千万记得这个ProHy!

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:LA 3942 Remember the Word——DP + 字典树
下一篇:HDU 5898 odd-even number——数位dp
相关文章

 发表评论

暂时没有评论,来抢沙发吧~