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配置中心服务:
自定义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


猜你喜欢
- 为什么要限流系统在设计的时候,我们会有一个系统的预估容量,长时间超过系统能承受的TPS/QPS阈值,系统有可能会被压垮,最终导致整个服务不可
- 一、TestNG介绍TestNG是Java中的一个测试框架, 类似于JUnit 和NUnit, 功能都差不多, 只是功能更加强大,使用也更方
- 线程的作用和意义线程 被定义为程序的执行路径。每个线程都定义了一个独特的控制流。如果您的应用程序涉及到复杂的和耗时的操作,那么设置不同的线程
- java如何实现ftp上传?如何创建文件夹?最佳答案:准备条件:java实现ftp上传用到了commons-net-3.3.jar包首先建立
- 前言Service是Android系统的四大组件之一。在Android系统中,Service可以用来执行一些需要在后台长期运行的任务,也可以
- 主要功能设计:用户、区域、物质类型、物质详情、物质申请和审核以及我的申请和通知公告以及灵活控制菜单权限主要技术实现:spring、 spri
- 简介本文介绍InheritableThreadLocal的用法。ThreadLocal可以将数据绑定当前线程,如果希望当前线程的Thread
- 1、概括在博客中,我们将讨论如何让Spring Security OAuth2实现使用JSON Web Tokens。2、Maven 配置首
- 为什么需要全局异常处理在传统 Spring Boot 应用中, 我们 @ControllerAdvice 来处理全局的异常,进行统一包装返回
- 前言所谓的字符串其实就是一串连续的字符,它是由许多单个字符连接而成的。如多个英文字母所组成的一个英文单词。字符串中可以包含任意字符,这些字符
- 实例如下:/// <summary> /// 上传ftp服务 /// </summary>
- 汉诺塔游戏一旦掌握了规律,其实是有点单调和无聊的,不过却是学习递归的一个绝佳例子,想当初学习老谭C的时候,就卡在这儿好长时间。对初学编程的人
- Spring Boot+Socket实现与html页面的长连接,客户端给服务器端发消息,服务器给客户端轮询发送消息,附案例源码功能介绍客户端
- 这个问题属于非常初级的问题,但是对于初学不知道的人可能会比较头疼。C++ 中函数是不能直接返回一个数组的,但是数组其实就是指针,所以可以让函
- 相信大家肯定都在电商网站买过东西,当我们看中一件喜欢又想买的东西时,这时候你又不想这么快结账,这时候你就可以放入购物车;就像我们平时去超市买
- 具体代码如下所示:/// <summary> /// 启用事务提交多条带参数的SQL语句 /// </summary>
- 一、常见非托管资源Windows窗口句柄、数据库链接、GDI对象、独占文件锁等等对象ApplicationContext,Brush,Com
- 1.过滤器:所谓过滤器顾名思义是用来过滤的,在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一
- IntelliJ IDEA最佳配置IntelliJ IDEA 分为两个版本:旗舰版(Ultimate)和社区版(Community)。旗舰版
- 之前在项目中会用到在Java在后台把数据填入Word文档的模板来提供前台下载,为了自己能随时查看当时的实现方案及方便他人学习我写了这篇博客,