如何使用 multipartResolver = StandardServletMultipartResolver 增加 Spring 6 (Tomcat 10) 上允许的最大多部分文件大小

问题描述 投票:0回答:1

已经围绕这个主题搜索并尝试了很多帖子......寻求帮助

这是一个在 Tomcat 10 中运行的 Spring 6 应用程序,使用接受多部分文件的 servlet,我们会收到此错误。下面是关键配置项和代码的列表:

错误:

08:51:46.440 [https-jsse-nio-9443-exec-29]警告org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver - 已解决[org.springframework.web.multipart.MaxUploadSizeExceededException:最大上传大小超出

文件大小限制在 1.5MB 左右(不是 128KB)

/src/resources/application.properties 包含:

spring.servlet.multipart.max-file-size=10485760
spring.servlet.multipart.max-request-size=10485760
spring.servlet.multipart.file-size-threshold=10485760
server.tomcat.max-swallow-size=-1
server.tomcatmax-http-form-post-size=-1

app-context.xml 包含:

<bean id="multipartResolver" class="org.springframework.web.multipart.support.StandardServletMultipartResolver"></bean>

tomcat context.xml 包含:

<Context path="gearlog" useHttpOnly="false"  allowCasualMultipartParsing="true">

所有包含接受多部分文件的方法的 servlet 都包含:

@Controller
@MultipartConfig(location="/tmp", fileSizeThreshold=1024*1024*100, 
maxFileSize=1024*1024*100, maxRequestSize=1024*1024*5*100)
public class...

我们所做的一切似乎都没有任何改变。我们可以上传大约 1.5MB 的文件。任何大于此值的值都会出现此错误

这个问题不是关于什么的(以消除有关该主题的许多帖子的歧义)

不是要添加限制。我们的问题是我们无法增加限制

不是优雅地处理违反限制的行为。首先,我们需要将限制提高到合理的水平!

不是关于使用 CommonsMultipartResolver - 当我们升级到 Spring 6 并且这些问题开始出现时,它就消失了

非常感谢任何帮助,因为我已经为此苦苦思索好几天了:(

spring spring-boot tomcat multipart
1个回答
0
投票

回答我自己的问题,以防将来对其他人有帮助

(a) 该应用程序有一些 spring-boot 依赖项,但不是 spring-boot 应用程序,因此 application.properties 是一个死胡同 (b) 将以下内容添加到 Web.xml 中的 servlet 调度程序可以正常工作,因为它将请求转发到控制器时会禁用限制 (c) 在控制器上的 @MultipartConfig 中设置限制从未起作用,因为限制是在调度期间施加的 - 即在到达控制器之前 - 至少这就是我认为它不起作用的原因

最终解决方案(对我来说)是更新 web.xml 如下

<servlet>
    <servlet-name>api-dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/api-dispatcher-servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
    <multipart-config>
      <location>/var/tmp</location>
      <max-file-size>104857600</max-file-size>
      <max-request-size>104857600</max-request-size>
      <file-size-threshold>0</file-size-threshold>
    </multipart-config>
</servlet>
<servlet-mapping>
    <servlet-name>api-dispatcher</servlet-name>
    <url-pattern>/api/*</url-pattern>
    
</servlet-mapping>
© www.soinside.com 2019 - 2024. All rights reserved.