如何设置上传文件的最大大小限制?

153

我正在使用JHipster基于Spring Boot和AngularJS开发应用程序。我的问题是如何设置上传文件的最大大小

如果我试图上传过大的文件,控制台会显示以下信息:

  DEBUG 11768 --- [io-8080-exec-10] c.a.app.aop.logging.LoggingAspect: 

Enter: com.anuglarspring.app.web.rest.errors.ExceptionTranslator.processRuntimeException() with argument[s] = 

[org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request; 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.]

服务器返回了状态码 500。

如何设置这个状态码?

20个回答

245

在Spring Boot 1.4中,你可以通过添加以下内容到你的application.properties文件来设置文件大小限制:

在Spring Boot 1.4中,你可以通过添加以下内容到你的application.properties文件来设置文件大小限制:

spring.http.multipart.max-file-size=128KB
spring.http.multipart.max-request-size=128KB

对于Spring Boot 2.x及以上版本,它的

spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB

对我很有用。来源:https://spring.io/guides/gs/uploading-files/

更新:

有人问两个属性之间的区别。

以下是正式定义:

MaxFileSize:上传文件允许的最大大小,以字节为单位。如果任何上传的文件大小超过此大小,Web容器将抛出异常(IllegalStateException)。默认大小为无限制。

MaxRequestSize:multipart/form-data请求允许的最大大小,以字节为单位。如果所有上传文件的总体积超出此阈值,则Web容器将抛出异常。默认大小为无限制。

解释每个参数:

MaxFileSize:单个文件上传限制。这只适用于单个文件限制。

MaxRequestSize:单个上传请求中所有文件总大小的限制。这检查总限制。假设您有两个文件 a.txtb.txt 用于单个上传请求。 a.txt5kbb.txt7kb,因此 MaxRequestSize 应该在 12kb 以上。


9
我在Spring Boot 2.0.1中使用以下配置:spring.servlet.multipart.max-file-size = 5MB spring.servlet.multipart.max-request-size = 5MB这段代码的作用是设置文件上传的最大大小为5MB。 - Nagaraja JB
1
max-file-sizemax-request-size有什么区别? - Arun Gowda
3
max-file-size 表示单个文件可上传的最大大小。max-request-size 表示单个上传请求中所有文件总大小的限制。因此,如果要增加上传大小,需要同时增加这两个值,因为一个是单个文件的限制,另一个是单个请求中所有文件的总大小限制。 - Bahadir Tasdemir
1
如果您正在使用Spring Boot进行微服务开发,您必须将相同的配置添加到网关服务中,以防止上传错误。我希望这能为某些人节省我经历过的麻烦。 - AguThadeus
正如@AguThadeus所建议的那样,对于使用网关设置进行微服务开发,我们需要在网关属性中添加spring.servlet.multipart.max-file-size = 5MB spring.servlet.multipart.max-request-size = 5MB - Sandeep K Nair
我不知道为什么,但如果我使用spring.servlet.multipart.max-file-size=50MB spring.servlet.multipart.max-request-size=50MB,它就无法正常工作... 如果值小于50MB,则可以。有任何未解决的问题吗? - Safari

33

对于Spring Boot 2.+,请确保使用spring.servlet而不是spring.http

---
spring:
  servlet:
    multipart:
      max-file-size: 10MB
      max-request-size: 10MB

如果你必须使用tomcat,你可能会创建EmbeddedServletContainerCustomizer,但这并不是一件好事。

如果你可以不使用tomcat,你可以用undertow等替代tomcat,从而完全避免这个问题。


在Spring Boot 2+中引入了spring.servlet的更改,值得编辑您的答案,因为以前是(Spring Boot <= 1.5.9)spring.http.multipart。 - bluelabel
spring.servlet.multipart.max-file-size=10MBspring.servlet.multipart.max-request-size=10MB - SWiggels
同时使用 #SWiggels。对于那些运行版本 > 1.5.9 的用户,请使用 spring.servlet...。 - Gian

33

祝您好运,先生! - BlackTea
你救了我的一天! - kmar akrout
Pivotal的开发人员是什么促使他们做出这个改变的?我觉得这可能会给Spring Boot升级到Spring Boot 2带来额外负担。 - ChandraBhan Singh

25

您需要将multipart.maxFileSizemultipart.maxRequestSize参数设置为比默认值更高的值。这可以在您的spring boot配置yml文件中完成。例如,将以下内容添加到application.yml中将允许用户上传10Mb文件:

multipart:
    maxFileSize: 10Mb
    maxRequestSize: 10Mb

如果用户需要在单个请求中上传多个文件,并且它们的总大小可能超过10Mb,则需要将multipart.maxRequestSize配置为更高的值:

multipart:
    maxFileSize: 10Mb
    maxRequestSize: 100Mb

来源:https://spring.io/guides/gs/uploading-files/


3
我加入了以下内容: http: multipart: maxFileSize: 100Mb maxRequestSize: 100Mb 到Spring部分,但这并没有起到作用。 - tibi
2
如果您正在使用Sprint Boot 1.4.x,请查看webmaster的答案,因为此属性已更改。 - AndreLDM

17

在应用程序属性文件(application.properties)和应用程序 yaml 文件中定义属性时存在一些差异。

在 application.yml 文件中:

spring:
    http:
      multipart:
       max-file-size: 256KB
       max-request-size: 256KB

在 application.properties 文件中:

spring.http.multipart.max-file-size=128KB
spring.http.multipart.max-request-size=128KB

注意:Spring版本为4.3和Spring Boot版本为1.4


17

spring 2.x 版本中,选项略有改变。所以上述答案几乎正确但并非完全正确。在你的 application.properties 文件中添加以下内容-

spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB

9
我在Expert Exchange上找到了解决方案,对我很有效。
@Bean
public MultipartConfigElement multipartConfigElement() {
    MultipartConfigFactory factory = new MultipartConfigFactory();
    factory.setMaxFileSize("124MB");
    factory.setMaxRequestSize("124MB");
    return factory.createMultipartConfig();
}

参考:https://www.experts-exchange.com/questions/28990849/How-to-increase-Spring-boot-Tomcat-max-file-upload-size.html

这篇文章介绍了如何增加Spring Boot Tomcat的最大文件上传大小。您可以通过更改application.properties文件来实现此目的。在该文件中,添加以下行:

spring.http.multipart.max-file-size=10MB
spring.http.multipart.max-request-size=10MB

请注意,此处将最大文件大小和最大请求大小设置为10MB。您可以根据需要进行更改。


9

在Spring Boot的application.properties文件中,这些属性可以使可接受的文件大小无限制 -

# To prevent maximum upload size limit exception
spring.servlet.multipart.max-file-size=-1
spring.servlet.multipart.max-request-size=-1

8
更具体地说,在您的application.yml配置文件中,在“spring:”部分添加以下内容。
http:
    multipart:
        max-file-size: 512MB
        max-request-size: 512MB

空格很重要,而且你不能使用制表符进行缩进


如果这是一个需要在开发和生产环境中设置的属性,只需将其添加到application.yml中,它就会级联到两个配置文件中,因此您不需要重复设置它。 - geraldhumphries

5

我正在使用spring-boot-1.3.5.RELEASE,我也遇到了同样的问题。以上的解决方案都没有帮助到我。但最终,在application.properties中添加以下属性解决了这个问题。

multipart.max-file-size=10MB

2
也适用于Spring Boot v1.2.3.RELEASE。 - DjAlan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接