首页 > 编程知识 正文

spring boot大文件上传方案,spring boot注解限定文件上传大小

时间:2023-05-03 18:53:56 阅读:261244 作者:2191

问题描述:

springboot 通过MultipartFile接受前端传过来的文件时是有文件大小限制的(springboot内置tomact的的文件传输默认为1MB)

超过默认限制值,出现的异常如下:

Caused by: java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (60271786) exceeds the configured maximum (52428800)

at org.apache.catalina.connector.Request.parseParts(Request.java:2890)

at org.apache.catalina.connector.Request.parseParameters(Request.java:3185)

at org.apache.catalina.connector.Request.getParameter(Request.java:1116)

at org.apache.catalina.connector.RequestFacade.getParameter(RequestFacade.java:381)

at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:84)

... 31 common frames omitted

Caused by: org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (60271786) exceeds the configured maximum (52428800)

at org.apache.tomcat.util.http.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:805)

at org.apache.tomcat.util.http.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:256)

at org.apache.tomcat.util.http.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:280)

at org.apache.catalina.connector.Request.parseParts(Request.java:2846)

... 35 common frames omitted

问题解析:

问题是设置了限制大小之后file穿不过去controller,在表单传过去的时候就被拦截抛异常了,需进行的处理:

1.修改上传的文件大小上限

2.前端捕获异常并进行错误提示

问题解决:

1.Springboot通过配置application.yml文件来自定义参数实现上传文件限制的配置

实现:通过application.yml配置参数来实现上传单个文件和所有文件大小的最大值

A 导入依赖 pox.xml

<dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-configuration-processor</artifactId>

    <optional>true</optional>

</dependency>

 

B application.yml 中自定义配置参数

spring:

    **

 

#Foruploadingfiles

test-config:

    maxFileSize: 50

特别注意:

1.自定义的参数配合不在spring节点下,与spring并行的节点

2.定义的key-val,maxFileSize与值50间一定有空格,亲测,key冒号后与val无空格,则无法获取到val值

 

定义TestConfig.java 类

packagecom.chinacache.*.config;

 

importorg.springframework.boot.context.properties.ConfigurationProperties;

importorg.springframework.stereotype.Component;

 

@Component

@ConfigurationProperties(prefix="test-config")

Public class TestConfig{

Private long maxFileSize;

 

Public long getMaxFileSize(){

Return maxFileSize;

}

 

Public void setMaxFileSize(longmaxFileSize){

this.maxFileSize=maxFileSize;

}

}

 

C 调用,使用自定义参数(在启动类App.class文件中配置Bean来设置文件大小)

一般配置就放在启动类中就好了

 

@SpringBootApplication

publicclassTestApplication{

@Autowired

TestConfig testConfig;

 

publicstaticvoidmain(String[]args){

SpringApplication.run(TestApplication.class,args);

}

@Beanpublic MultipartConfigElement multipartConfigElement() { MultipartConfigFactory factory = new MultipartConfigFactory(); //The max size of file factory.setMaxFileSize(DataSize.ofMegabytes(testConfig.getMaxFileSize())); /// the max size of total files factory.setMaxRequestSize(DataSize.ofMegabytes(testConfig.getMaxAllFilesSize())); return factory.createMultipartConfig();}

}

 

2. 前端捕获异常并进行错误提示

在controller层通过model传配置参数到前端 :model.addAttribute("maxFileSize", tsConfig.getMaxFileSize());

前端获取上传文件的大小与配置的文件大小上限进行比较,并进行warning提示。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。