原始问题:例如,将分段文件上传大小限制为10mb
在Tomcat级别。
我当前的解决方案(基于Spring Boot的StandardMultipartHttpServletRequest
)首先在内部检查Content-Length
请求标头。到目前为止听起来还不错...
但是我看到对于大型文件,在此检查开始执行之前甚至在任何servlet过滤器逻辑之前,都会出现明显的延迟(与文件大小相对应)。实际上,我在org.apache.tomcat.util.net.NioEndpoint
之前(或其内部)遇到了这个延迟,这是stacktrace中的第二个调用(第一个是Thread
)。
看起来像tomcat在应用任何应用程序逻辑之前将完整的请求主体加载到低层。
相反,当我将Tomcat作为反向代理包装在Nginx中,并在Nginx中限制文件大小(也仅检查标头)时,它会立即中断上传。
问题:从技术上来说,在请求正文上传完成之前,可以在Tomcat中执行任何逻辑吗?特别是为了限制文件大小?
答案 0 :(得分:1)
设置tomcat上传大小的步骤:
1。转到Tomcat的webapps / manager / WEB-INF文件夹,然后打开 HashMap
2。您会找到此标签 web.xml
,如下所示:
<multipart-config>
3。根据您的需要更改以上配置。
4。对于nginx,在所需的任何块中设置client_max_body_size:
示例:
<multipart-config>
<!-- 50MB max (size in bytes) -->
<max-file-size>52428800</max-file-size>
<max-request-size>52428800</max-request-size>
<file-size-threshold>0</file-size-threshold>
</multipart-config>
希望这对您有所帮助:)