首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CommonsMultipartResolver和HandlerExceptionResolver工作不一致

CommonsMultipartResolver和HandlerExceptionResolver工作不一致
EN

Stack Overflow用户
提问于 2015-01-12 00:11:14
回答 1查看 2K关注 0票数 1

我正在尝试创建一个使用Spring和CommonsMultipartResolver上传文件的简单表单。

我使用Spring4.0.6. v7.0.57和Tomcat v7.0.57。我将这些Apache依赖项添加到我的pom文件中:

代码语言:javascript
复制
        <!-- 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文件中有以下配置:

代码语言:javascript
复制
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="maxUploadSize" value="5120000" />
</bean>

我在控制器中添加了以下方法:

代码语言:javascript
复制
@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,但这似乎没有任何效果。有人能帮我找出我哪里出了问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27893610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档