我正在尝试创建一个使用Spring和CommonsMultipartResolver上传文件的简单表单。
我使用Spring4.0.6. v7.0.57和Tomcat v7.0.57。我将这些Apache依赖项添加到我的pom文件中:
<!-- Apache Commons FileUpload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<!-- Apache Commons IO -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>我的spring文件中有以下配置:
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="5120000" />
</bean>我在控制器中添加了以下方法:
@Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse httpServletResponse, Object o, Exception e) {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("website/upload");
if (e instanceof MaxUploadSizeExceededException)
{
modelAndView.addObject("errors", "Maximum upload size of " + (((MaxUploadSizeExceededException) e).getMaxUploadSize() + " bytes exceeded"));
}
else
{
modelAndView.addObject("errors", "An unexpected error occurred. Please try again later.");
}
return modelAndView;
}如果我将maxUploadSize设置为更小的东西(即1mb),并上传更大一点的文件(我用一个1.7mb的文件进行了测试),这将正确工作,页面将显示给用户错误。但是,在5MB的较大限制下,如果我上传一个比限制大几个字节的文件,则会多次调用我的resolveException方法,但不会加载该页面。我使用Chrome和Firefox进行了测试。在Firefox中,我看到了一个错误:“连接被重置了”。在“网络”选项卡中,它表示该邮件已“中止”。在Chrome中,我看到一个错误:错误代码: ERR_CONNECTION_RESET,上面写着“这个网页不可用”。在“网络”选项卡上,帖子简单地说它“失败了”。
我的猜测是,随着更大的文件上传,它是取消文件上传之前,它完成,这是我想要保持的行为。但是,在这些情况下,我仍然想向用户展示一个更好的错误。
我尝试将maxInMemorySize属性CommonsMultipartResolver增加到10 of,但这似乎没有任何效果。有人能帮我找出我哪里出了问题吗?
发布于 2015-01-13 01:50:16
终于解决了问题。它实际上与HandlerExceptionResolver无关,似乎是由于我正在使用的Tomcat版本中的一个设置(7.0.57)。在server.xml中,我必须在连接器上指定"maxSwallowSize“属性。
根据Tomcat文档,maxSwallowSize是“Tomcat为中止上传而吞噬的最大请求体字节数(不包括传输编码开销)。如果Tomcat知道请求主体将被忽略,但客户端仍然发送请求体,则终止上传。如果Tomcat不吞咽请求体,客户端就不太可能看到响应。如果不指定默认值2097152 (2MB),则将使用默认值2097152(2MB)。小于零的值表示不应执行任何限制。”
http://tomcat.apache.org/tomcat-7.0-doc/config/http.html
https://stackoverflow.com/questions/27893610
复制相似问题