SpringBoot上传文件大小受限问题的解决办法

作者:一宿君 时间:2023-04-19 09:46:16 

今天在做项目学习的过程中,需要用到文件上传,启动项目正常,访问上传post请求突然报出了一个异常,特此记录一下。

1、控制台异常

org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size exceeded; nested exception is java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededException: The field file exceeds its maximum permitted size of 1048576 bytes.
at org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.handleParseFailure(StandardMultipartHttpServletRequest.java:121)
at org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.parseRequest(StandardMultipartHttpServletRequest.java:114)

从上述异常可以看出,是因为上传的file文件超过了spring默认配置的最大值1048576 bytes,上传文件我们通常情况下是使用MultipartFile接口类接收前端上传的文件,可见对于MultipartFile文件的默认限制也是1048576 bytes,即1M。

但是很多情况下我们用手机直接拍摄的证件照或者是文档问阿金基本都是在2M以上,很显然这不能满足我们的日常需求,所以我们就要修改默认配置参数大小。

2、上传文件默认参数

SpringBoot不同的版本,对应的设置参数不同:

Spring Boot 1.3.x and earlier

  • multipart.maxFileSize

  • multipart.maxRequestSize

Spring Boot 1.4.x and 1.5.x

  • spring.http.multipart.maxFileSize

  • spring.http.multipart.maxRequestSize

Spring Boot 2.x

  • spring.servlet.multipart.maxFileSize

  • spring.servlet.multipart.maxRequestSize

3、解决方法

3.1、方法1(在配置文件.yml或者.properties中直接修改参数)

例如我使用的是SpringBoot 2.1.3的版本,然后直接再配置文件中设置参数大小:

#做限制的参数配置
spring:
 servlet:
   multipart:
     enabled: true #默认支持文件上传
     max-file-size: 20MB # 最大支持文件大小
     max-request-size: 30MB # 最大支持请求大小

#不做限制的参数配置
spring:
 servlet:
   multipart:
     enabled: true #默认支持文件上传
     max-file-size: -1 #不做限制
     max-request-size: -1 #不做限制

设置完重启项目即可成功上传文件。

3.2、方法2(自定义config配置类)

将参数配置在远程配置文件中心,如果是配置项目中的配置文件中,那就跟方法1一样了,就没必要再单独写配置类了,将参数配置在远程配置中心,就是为了可以根据临时需求动态修改参数,而不用重启项目。

常见的远程配置文件中心服务有Nacos、Apollo(阿波罗)、SpringCloud等等,我使用的是Nacos配置中心服务:

SpringBoot上传文件大小受限问题的解决办法

自定义MultipartFileConfig配置类:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.MultipartConfigFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.unit.DataSize;
import javax.servlet.MultipartConfigElement;

/**
* @author: 一宿君
* @date: 2022-03-23 19:18:51
* @description:
*/
@Configuration
public class MultipartFileConfig {

@Value("${config.multifile.maxFileSize}")
   private Long maxFileSize;
   @Value("${config.multifile.maxRequestSize}")
   private Long maxRequestSize;

@Bean
   public MultipartConfigElement multipartConfigElement() {
       MultipartConfigFactory factory = new MultipartConfigFactory();
       /**
        * 单个数据大小,
        * DataSize.ofMegabytes(maxFileSize)默认是配置字节,将字节转化为MB
        */
       factory.setMaxFileSize(DataSize.ofMegabytes(maxFileSize));
       // 总上传数据大小
       factory.setMaxRequestSize(DataSize.ofMegabytes(maxRequestSize));
       return factory.createMultipartConfig();
   }
}

这样就可以随时控制上传文件的大小了!

来源:https://blog.csdn.net/qq_52596258/article/details/123693396

标签:springboot,上传,文件
0
投稿

猜你喜欢

  • java 引用传递的三种类型小结

    2023-09-03 03:59:47
  • 解析springboot整合谷歌开源缓存框架Guava Cache原理

    2023-11-07 13:24:23
  • 快速学习六大排序算法

    2023-11-02 22:36:19
  • Java容器HashMap与HashTable详解

    2022-03-05 19:25:00
  • Java的“Goto”与标签及使用详解

    2023-11-11 03:56:09
  • Spring AOP如何整合redis(注解方式)实现缓存统一管理详解

    2023-11-19 06:09:27
  • 一篇文章带你了解XGBoost算法

    2021-10-10 01:14:45
  • Mybatis下的SQL注入漏洞原理及防护方法解析

    2022-06-30 18:38:29
  • MyBatis批量插入(insert)数据操作

    2023-09-21 00:03:54
  • Java之如何关闭流

    2023-11-04 21:29:11
  • java中匿名内部类详解

    2022-10-06 14:56:56
  • Java_异常类(错误和异常,两者的区别介绍)

    2023-09-19 08:53:27
  • java获取和设置系统变量问题(环境变量)

    2023-11-19 07:34:07
  • Java 关键字 速查表介绍

    2022-07-03 22:04:48
  • C语言预处理预编译命令及宏定义详解

    2023-06-18 16:28:06
  • 有关Java中的BeanInfo介绍

    2023-08-05 00:13:42
  • Java中的内部类你了解吗

    2022-12-11 08:29:10
  • C语言编程C++动态内存分配示例讲解

    2023-11-02 18:00:12
  • 基于JavaMail的Java邮件发送

    2022-10-30 18:56:56
  • java编程基础之模仿用户登录代码分享

    2022-06-09 17:38:22
  • asp之家 软件编程 m.aspxhome.com