编程语言
首页 > 编程语言> > springboot 使用multipartFile上传文件,报错java.lang.IllegalArgumentException: Expected MultipartHttpServletRe

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