SpringBoot中的multipartResolver上传文件配置

 更新时间:2021年10月26日 09:32:55   作者:闫-先生  
这篇文章主要介绍了SpringBoot中的multipartResolver上传文件配置,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

multipartResolver上传文件配置

1、gradle配置

    compile ('commons-io:commons-io:1.4')
    compile('commons-fileupload:commons-fileupload:1.2.1')

2、注册Bean

    @Bean(name = "multipartResolver")
    public MultipartResolver multipartResolver(){
        CommonsMultipartResolver resolver = new CommonsMultipartResolver();
        resolver.setDefaultEncoding("UTF-8");
        //resolveLazily属性启用是为了推迟文件解析,以在在UploadAction中捕获文件大小异常
        resolver.setResolveLazily(true);
        resolver.setMaxInMemorySize(40960);
        //上传文件大小 50M 50*1024*1024
        resolver.setMaxUploadSize(50*1024*1024);
        return resolver;
    }

SpringBoot MultipartResolver的坑

在使用springBoot上传文件的时候,我们会用到MultipartResolver。我看通过源码可以看到

@Configuration
@ConditionalOnClass({ Servlet.class, StandardServletMultipartResolver.class,
  MultipartConfigElement.class })
@ConditionalOnProperty(prefix = "spring.http.multipart", name = "enabled", matchIfMissing = true)
@EnableConfigurationProperties(MultipartProperties.class)
public class MultipartAutoConfiguration {
 private final MultipartProperties multipartProperties;
 public MultipartAutoConfiguration(MultipartProperties multipartProperties) {
  this.multipartProperties = multipartProperties;
 }
 @Bean
 @ConditionalOnMissingBean({ MultipartConfigElement.class,
   CommonsMultipartResolver.class })
 public MultipartConfigElement multipartConfigElement() {
  return this.multipartProperties.createMultipartConfig();
 }
 @Bean(name = DispatcherServlet.MULTIPART_RESOLVER_BEAN_NAME)
 @ConditionalOnMissingBean(MultipartResolver.class)
 public StandardServletMultipartResolver multipartResolver() {
  StandardServletMultipartResolver multipartResolver = new StandardServletMultipartResolver();
  multipartResolver.setResolveLazily(this.multipartProperties.isResolveLazily());
  return multipartResolver;
 }

可以看出MultipartAutoConfiguration配置类,默认加载的是StandardServletMultipartResolver。

然而,我们往往会在项目中加入commons-fileupload依赖,加载的是CommonsMultipartResolver。此时同时使用两个,会产生冲突。

解决方案

1、使用SpringBoot 默认的StandardServletMultipartResolver,不依赖commons-fileupload。

2、使用commons-fileupload的CommonsMultipartResolver,

排除默认

spring:
  autoconfigure:
    exclude: org.springframework.boot.autoconfigure.web.servlet.MultipartAutoConfiguration

自定义文件解析对象

    @Bean(name = "multipartResolver")
    public MultipartResolver multipartResolver() {
        CommonsMultipartResolver resolver = new CommonsMultipartResolver();
        resolver.setDefaultEncoding("UTF-8");
        return resolver;
    }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 详解在Spring-Boot中实现通用Auth认证的几种方式

    详解在Spring-Boot中实现通用Auth认证的几种方式

    这篇文章主要介绍了详解在Spring-Boot中实现通用Auth认证的几种方式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • 详解Spring中的FactoryBean

    详解Spring中的FactoryBean

    本篇文章主要介绍了Spring中的FactoryBean,如果一个bean的创建过程中涉及到很多其他的bean 和复杂的逻辑,用xml配置比较困难,这时可以考虑用FactoryBean
    2017-04-04
  • Java基础知识之StringReader流的使用

    Java基础知识之StringReader流的使用

    这篇文章主要介绍了Java基础知识之StringReader流的使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Java对象和Json文本转换工具类的实现

    Java对象和Json文本转换工具类的实现

    Json 是一个用于Java对象和Json文本相互转换的工具类,本文主要介绍了Java对象和Json文本转换工具类,具有一定的参考价值,感兴趣的可以了解一下
    2022-03-03
  • Java开发环境jdk 1.8安装配置方法(Win7 64位系统/windows server 2008)

    Java开发环境jdk 1.8安装配置方法(Win7 64位系统/windows server 2008)

    这篇文章主要介绍了Java开发环境配置方法(Win7 64位系统/windows server 2008),需要的朋友可以参考下
    2016-10-10
  • 详细分析Java中String、StringBuffer、StringBuilder类的性能

    详细分析Java中String、StringBuffer、StringBuilder类的性能

    在Java中,String类和StringBuffer类以及StringBuilder类都能用于创建字符串对象,而在分别操作这些对象时我们会发现JVM执行它们的性能并不相同,下面我们就来详细分析Java中String、StringBuffer、StringBuilder类的性能
    2016-05-05
  • Java经典面试题汇总:Spring Boot

    Java经典面试题汇总:Spring Boot

    本篇总结的是Spring-Boot框架相关的面试题,后续会持续更新,希望我的分享可以帮助到正在备战面试的实习生或者已经工作的同行,如果发现错误还望大家多多包涵,不吝赐教,谢谢
    2021-07-07
  • 解析java中的error该不该捕获

    解析java中的error该不该捕获

    这篇文章主要介绍了java中的error该不该捕获,需要的朋友可以参考下
    2014-02-02
  • android中GridView的用法示例

    android中GridView的用法示例

    这篇文章主要介绍了android中GridView的用法,对于Android初学者很有参考学习价值,需要的朋友可以参考下
    2014-08-08
  • Mybatis的入门示例代码

    Mybatis的入门示例代码

    首先新建一个JavaWeb项目并导入mybatis依赖的jar包,同时Mybatis是对数据库的操作所以我们需要在数据库中新建一个表user用来演示。下面通过本文给大家详细介绍Mybatis的入门示例代码,感兴趣的朋友一起看看吧
    2016-11-11

最新评论