一、解决方式
1、yml配置:
spring:
servlet:
multipart:
max-file-size: 100MB # file-size 总文件大小 MB 大写
max-request-size: 100MB # request-size 单个文件大小 MB 大写
enabled: true # 是否支持 multipart 上传文件
2、application启动类:
@SpringBootApplication(exclude = {MultipartAutoConfiguration.class})
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@Bean("multipartResolver")
public CommonsMultipartResolver multipartResolver(){
CommonsMultipartResolver resolver = new CommonsMultipartResolver();
resolver.setDefaultEncoding("UTF-8");
resolver.setMaxInMemorySize(10000);
return resolver;
}
}
二、问题概述
1、SpringMVC中,文件的上传,是通过MultipartResolver实现的。MultipartResolver 的实现类有两个:
1)、CommonsMultipartResolver
需要使用Apache的Commons-Fileupload等jar包支持,但它能在比较旧的servlet版本中使用。
2)、StandardServletMultipartResolver
不需要第三方 jar 包支持,它使用servlet内置的上传功能,但是只能在Servlet 3以上的版本使用。
三、源码解析
1、MultipartAutoConfiguration
1)、进入自动配置MultipartResolver的类,MultipartAutoConfiguration。
- 可以看到springboot的自动配置是默认配置的StandardServletMultipartResolver这个实现类,所以在如下配置的参数后,转化CommonsMultipartResolver就会报错。