问题描述
我有一个要求,上传文件的最大大小为150MB。我已经使用Spring Boot 1.5编写了一个基于Java的Rest服务。我无法上传较大的文件。该代码适用于较小的文件大小。我已经为tomcat配置了所有与payload / multipart相关的配置,不适用于大型文件。我收到“ 502:错误的网关:注册的端点无法处理该请求。该代码已部署在Pivotal Cloud Foundry中。我的问题是”在Go路由器级别配置的有效负载是否存在大小限制,这会导致此问题? “感谢您的帮助。
谢谢
解决方法
这是我的建议:
-
在本地运行您的应用程序。确保您可以上传150M +的文件。这样可以确保正确配置了Spring Boot,并且在Tomcat(嵌入式)或Spring中没有任何会导致此问题的限制。
-
当您部署到Cloud Foundry安装时,将没有基于大小的其他限制。 Gorouter不会直接限制可以上传的文件的大小。 但是,Gorouter对于一个请求可以消耗多少时间(即接收请求,处理和响应)有一个上限。默认情况下为900秒(您的CF平台可能有所不同,请咨询您的平台运营商以获取特定值)。
之所以这样说是因为您的客户端的上传带宽将在这里发挥作用。如果您的客户端正在缓慢上载150M文件,那么假设要花费一个小时来上载该文件,那么它将失败,并显示您所看到的响应。
我的确认建议是运行
cf logs
并查找标记为[RTR]
的日志条目,该条目与您失败的请求相对应。它将具有502状态代码。现在,检查response_time字段,看看它是否与平台上设置的最大请求时间匹配(默认为900s)。如果匹配,那就是您的问题。
如果上述方法均无济于事,则需要查找更多信息。也许尝试提高日志级别并运行cf logs
,以查看是否从应用程序中获得更多线索。
尝试通过配置增加多部分大小
spring.http.multipart.max-file-size
= 200MB //您可以
和
Tomcat的配置或AP
webapps/manager/WEB-INF/web.xml
<multipart-config>
<max-file-size>52428800</max-file-size>
<max-request-size>52428800</max-request-size>
<file-size-threshold>0</file-size-threshold>
</multipart-config>