使用 MultipartHttpServletRequest resolveMultipart = commonsMultipartResolver.resolveMultipart(request);
出现 resolveMultipart.getFile("file"); 打印null,无法获取文件参数
CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
commonsMultipartResolver.resolveMultipart(request);
MultipartHttpServletRequest resolveMultipart = commonsMultipartResolver.resolveMultipart(request);
System.out.println(commonsMultipartResolver.isMultipart(request));
// 这里打印了null ,前端检查没有错误字段也是对的
System.out.println(resolveMultipart.getFile("file"));
/**
*TODO resolveMultipart.getFile("file") 获取上传文件时为null
* 原因:spring-boot自带的org.springframework.web.multipart.MultipartFile和Multipart产生冲突,如果同时使用了MultipartResolver 和ServletFileUpload,就会在iter.hasNext()返回false.然后整个循环就跳出去了。
* 整个问题产生的原因是Spring框架先调用了MultipartResolver 来处理http multi-part的请求。这里http multipart的请求已经消耗掉。
* 后面又交给ServletFileUpload ,那么ServletFileUpload 就获取不到相应的multi-part请求。因此将spring-boot自带的multipartResolve配置去除,问题就解决了
* MultiPartFile获取不到文件为null
* 解决方法一: 在spring-boot配置文件application.yml 禁用spring-boot自带的org.springframework.web.multipart.MultipartFile,
* Spring Boot 2.0.0 以下版本配置 spring.http.multipart.enabled=false 禁用自带的 multipart
* Spring Boot 2.0.0 或更高版本配置 spring.servlet.multipart.enabled=false 禁用自带的 multipart
* 解决方法二: 在Application 启动文件中配置 排除项 @SpringBootApplication(exclude = {MultipartAutoConfiguration.class})
*
**/
解决办法一:(配置application.yml文件)
## resolveMultipart.getFile("file") 获取上传文件时为null
## 原因:spring-boot自带的org.springframework.web.multipart.MultipartFile和Multipart产生冲突,如果同时使用了MultipartResolver 和ServletFileUpload,就会在iter.hasNext()返回false.然后整个循环就跳出去了。
## 整个问题产生的原因是Spring框架先调用了MultipartResolver 来处理http multi-part的请求。这里http multipart的请求已经消耗掉。
## 后面又交给ServletFileUpload ,那么ServletFileUpload 就获取不到相应的multi-part请求。因此将spring-boot自带的multipartResolve配置去除,问题就解决了
## MultiPartFile获取不到文件为null
## 解决方法一: 在spring-boot配置文件application.yml 禁用spring-boot自带的org.springframework.web.multipart.MultipartFile,
## 解决方法二: 在Application 启动文件中配置 排除项 @SpringBootApplication(exclude = {MultipartAutoConfiguration.class})
## spring.http.multipart.enabled已被替换为spring.servlet.multipart.enabled
## 如果您使用的是Spring Boot 2.0.0或更高版本,则应该使用spring.servlet.multipart.enabled
## 解决办法:Spring Boot 2.0.0 以下版本配置 spring.http.multipart.enabled=false 禁用自带的 multipart
# http:
# multipart:
# enabled: false
## 解决办法:Spring Boot 2.0.0 或更高版本配置 spring.servlet.multipart.enabled=false 禁用自带的 multipart
# servlet:
# multipart:
# enabled: false
解决办法二:(springboot2.0启动文件Application.java中排除MultipartAutoConfiguration.class)
@SpringBootApplication(exclude = {MultipartAutoConfiguration.class})
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}