springboot 使用multipartFile上传文件,报错java.lang.IllegalArgumentException: Expected MultipartHttpServletRe
作者:互联网
问题重现:
springboot项目本地运行正常,上传文件正常;打war包后,部署weblogic后不能正常访问,上传选择文件后点击确认页面提示“Expected MultipartHttpServletRequest: is a MultipartResolver configured?” 后台报错
问题分析:
因为找不到multipartReslover的原因,在springMVC配置文件配置它的时候,不能用其他名字,只能用指定名字,否则就出现这种找不到的错误
springboot项目是有自动配置的自动配置类为:MultipartAutoConfiguration
@Bean(
name = {"multipartResolver"}
)
@ConditionalOnMissingBean({MultipartResolver.class})
public StandardServletMultipartResolver multipartResolver() {
return new StandardServletMultipartResolver();
}
代码可以看出配置的multipartResoler并没有问题,问题在由默认配置使用的是StandardServletMultipartResolver,而项目需要部署到11G的weblogic上,servlet的版本是2.5,是只能使用commons-fileupload。maven配置如下,这样就有问题了,部署到weblogic上后使用的就不再是StandardServletMultipartResolver,而是CommonsMultipartResolver
<!--使用multipartFile上传,需要引这两个包-->
<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.4</version>
</dependency>
解决方法:
定义一个multipartResoler的Bean替换自动配置中的Bean
代码如下:
@Bean
public CommonsMultipartResolver multipartResolver() {
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
multipartResolver.setDefaultEncoding("UTF-8");
multipartResolver.setMaxUploadSize(104857600);
return multipartResolver;
}
注意配置此Bean必须在有注解@Configuration的类中,我这里直接将此Bean配置到启动类XxxxxxApplication中.
标签:lang,MultipartResolver,配置,commons,CommonsMultipartResolver,Bean,multipartResolve 来源: https://www.cnblogs.com/bijizhixing/p/11269087.html