zl程序教程

您现在的位置是:首页 >  后端

当前栏目

spring boot报FileSizeLimitExceededException异常的解决方法

2023-09-14 09:06:17 时间

开发spring boot程序时,遇到了如下错误:
The field file exceeds its maximum permitted size of 1048576 bytes.

img

原因:
Spring Boot工程嵌入的tomcat限制了请求的文件大小,官方文档中这样描述:

Spring Boot embraces the Servlet 3 javax.servlet.http.Part API to support uploading files. By default Spring Boot configures Spring MVC with a maximum file of 1Mb per file and a maximum of 10Mb of file data in a single request.

翻译一下:每个文件的最大为1Mb,单次请求的文件的总数不能大于10Mb。

解决方法:

spring boot 2.0 之后,在配置文件application.yaml或 application.properties中增加如下配置:

spring.servlet.multipart.max-file-size=100MB
spring.servlet.multipart.max-request-size=1000MB

如果想不让文件大小受限,将spring.servlet.multipart.max-file-size这个参数设置成-1。



SpringBoot 之设置文件上传大小限制

问题:
SpringBoot默认上传文件大小不能超过1MB,超过之后会报以下异常:
org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededException: The field file exceeds its maximum permitted size of 1048576 bytes.

解决方法:
第一种解决方案:
增加Bean配置,注意当前类上需要加注解@Configuration,不然扫不到就不会起作用了;一般配置放在启动类中就可以。

/**  
 * 文件上传配置  
 * @return  
 */
@Bean
public MultipartConfigElement multipartConfigElement() {
    MultipartConfigFactory factory = new MultipartConfigFactory();  
    //文件最大
    factory.setMaxFileSize("10240KB"); //KB,MB
    /// 设置总上传数据总大小
    factory.setMaxRequestSize("102400KB"); 
    return factory.createMultipartConfig();  
}

第二种解决方案:
在配置文件(application.properties/application.yml)中加入如下设置即可:

# 单个文件大小(Mb和Kb都可以)
spring.servlet.multipart.maxFileSize=30MB
# 总上传的数据大小
spring.servlet.multipart.maxRequestSize=30MB


SpringBoot 2.X版本

application.properties
	# 单个文件的最大值
	spring.servlet.multipart.max-file-size = 1Mb 
	# 上传文件总的最大值
 	spring.servlet.multipart.max-request-size = 10Mb
application.yml
	spring:
    	servlet:
        	multipart:
           		enabled: true
           		max-file-size: 1MB # 单个文件的最大值
           		max-request-size: 10MB # 上传文件总的最大值

SpringBoot 1.5.X版本

Application启动类上添加 @Bean
	/**
	 * 文件上传配置
	 * @return
	 */
	@Bean
	public MultipartConfigElement multipartConfigElement() {
		MultipartConfigFactory factory = new MultipartConfigFactory();
		//设置单个文件的最大值
		factory.setMaxFileSize("1MB"); //KB,MB
		/// 设置上传文件总的最大值
		factory.setMaxRequestSize("10MB");//KB,MB
		return factory.createMultipartConfig();
	}

注:不知道为什么 SpringBoot1.5.x 版本的在配置文件上配置不生效,反正我是测试了不行,不知道是不是我自己的问题,望知道的大牛告知下。