当前位置: 首页 > 知识库问答 >
问题:

Spring Boot-多部分文件最大上载大小异常

蔺昊穹
2023-03-14

我正在用Spring Boot 2.1.3(使用标准的Tomcat嵌入式web服务器)开发一个endpoint来上载图像,我想限制多部分上载的大小。我可以通过以下属性轻松完成此操作:

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

但是我总是得到Spring无法捕获的500,因为Tomcat正在抛出异常并且请求无法到达我在RestController中的代码。

2019-03-02 10:12:50.544 ERROR [] [   o.a.c.c.C.[.[.[/].[dispatcherServlet]] [] Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size exceeded; nested exception is java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (3917946) exceeds the configured maximum (2097152)] with root cause 
org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (3917946) exceeds the configured maximum (2097152)

我的ExceptionHandler是这样的,但无论注释中出现什么异常,它显然都不起作用:

@ExceptionHandler(MaxUploadSizeExceededException.class)
public ResponseEntity handleMaxSizeException(Exception e) {
    logger.warn(e.getMessage());
    ...
    return status(HttpStatus.PAYLOAD_TOO_LARGE).body(...);
}

我已经尝试了已经提到的属性,但没有任何效果:

@Bean
public TomcatServletWebServerFactory containerFactory() {
    TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
    factory.addConnectorCustomizers((TomcatConnectorCustomizer) connector -> 
        ((AbstractHttp11Protocol<?>) connector.getProtocolHandler()).setMaxSwallowSize(-1));
    return factory;
}

我已经检查了以下问题(和其他问题...)的答案,但它们大多已经过时或根本不起作用:

  • 多部分文件最大大小异常-spring boot embbeded tomcat

有人在为此挣扎吗?

共有3个答案

太叔经赋
2023-03-14

Tomcat一直抱怨请求超过了配置的最大值(2097152),尽管我在全局web.xml中设置了默认设置:

      <max-file-size>52428800</max-file-size>
      <max-request-size>52428800</max-request-size>

最终解决了:我正在开发的servlet类扩展了一个具有@MultipartConfig注释的servlet类,但我的本地类没有@MultipartConfig注释。因此,请求没有被视为多部分,这导致了这个错误。

引发错误的代码位于这些行的超类中:

//Search through the parts for an uploaded file
for (Part part : request.getParts()) {
卢承弼
2023-03-14

请将其添加到您的application.properties中:

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

您可以在上述配置中根据需要更改大小

程谦
2023-03-14

有点晚了。您需要设置application.properties或application.ymlserver.tomcat.max-swal-size=-1有了它,tomcat将不会干扰上传请求,并且操作将在Spring之前完全处理,您的异常控制器将完美工作。参考

 类似资料:
  • 我已将最大文件大小设置为 这是我的控制器: 这是一条错误消息 请求过大文件后的最终结果是加载页面问题。我没有得到任何其他错误的堆栈跟踪,所以我有点卡住了什么是实际发生的。哦,是的,我已经尝试了许多其他的解决方案,如注册过滤器,在错误控制器中处理异常。每次我都会以同样的结果服务器崩溃告终。 编辑2 我的异常处理类:

  • 您可以使用基于浏览器的上传(不是多部分上传)中的内容长度范围字段来限制文件大小:http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-HTTPPOSTConstructPolicy.html 你怎么能在多部分上传中限制它?我正在使用EvaporateJS。

  • 我有一个endpoint,它将图像文件上传到服务器,然后上传到S3。 当我在本地主机上运行时,MultipartFile字节大小正确,并且上传成功。 然而,当我将它部署到EC2实例时,上传的文件大小不正确。 控制器代码 在 方法中,打印 file.size 会导致大小错误。 实际文件大小是649305字节,但是当上传到我的prod服务器时,它读取为1189763字节。 我的生产服务器是一个AWS

  • 我的springboot版本是2.0.2,我在controller类中创建了全局异常,如下所示:

  • PHP不遵守上载\u最大\u文件大小 详细信息:使用 和. conf中搜索grep-inrupload_max_filesize,只返回12M值。搜索 /etc/httpd/conf/ /etc/httpd/conf.d/显然是虚拟主机的根。在grep返回0结果的虚拟主机中没有特殊设置。

  • 问题内容: 我有一个无法访问的PC上托管的网站。我有一个上传表单,允许人们上传最大30MB的mp3文件。我的服务器端脚本是用PHP完成的。 每次尝试上传文件时,都会收到一条错误消息,声称文件超出了允许的最大大小,因此我需要增加大小。我在网络上的研究建议更改我无权访问的文件,这样将无法正常工作。其他人建议我将自定义文件添加到我的根目录中,该文件无效。还有其他建议吗? 问题答案: 您需要设置的值,并在