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
投稿

猜你喜欢

  • Android百度地图定位后获取周边位置的实现代码

    2021-11-30 08:21:07
  • Flutter软键盘的原理浅析

    2023-10-15 11:18:34
  • JAVA面试题之Forward与Redirect的区别详解

    2023-11-25 02:27:15
  • Java基础 Servlet监听器详解

    2022-05-30 20:40:02
  • SpringBoot基于数据库的定时任务统一管理的实现

    2023-12-10 12:57:47
  • C#实现获取不同对象中名称相同属性的方法

    2021-11-04 19:26:32
  • SpringBoot拦截 器如何获取http请求参数

    2023-11-28 19:40:48
  • 浅谈C#在网络波动时防重复提交的方法

    2022-07-23 22:37:01
  • C#实现递归调用的Lambda表达式

    2022-10-03 05:13:29
  • 解决Maven中关于依赖导入不进的问题

    2023-09-05 23:13:08
  • C#缓存之SqlCacheDependency用法实例总结

    2023-04-14 10:31:37
  • C#控制台输出进度和百分比的实例代码

    2021-10-01 23:49:43
  • 一文搞懂Java创建线程的五种方法

    2023-10-30 18:35:04
  • Spring Data JPA 实体类中常用注解说明

    2021-07-21 10:39:38
  • C#中利用代理实现观察者设计模式详解

    2022-02-25 17:49:36
  • Java基础知识精通二维数组的应用

    2022-02-03 03:01:28
  • Java 导出Excel增加下拉框选项

    2021-10-13 07:58:50
  • Android源码系列之深入理解ImageView的ScaleType属性

    2022-12-14 07:51:59
  • Freemarker如何生成树形导航菜单(递归)

    2023-02-24 13:52:16
  • Android实现录音声波图

    2022-08-05 20:55:49
  • asp之家 软件编程 m.aspxhome.com