Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring CommonsMultipartResolver和HandlerExceptionResolver工作不一致_Spring_Spring Mvc_Apache Commons Fileupload - Fatal编程技术网

Spring CommonsMultipartResolver和HandlerExceptionResolver工作不一致

Spring CommonsMultipartResolver和HandlerExceptionResolver工作不一致,spring,spring-mvc,apache-commons-fileupload,Spring,Spring Mvc,Apache Commons Fileupload,我试图使用Spring和CommonsMultipartResolver创建一个上传文件的简单表单 我在Tomcat v7.0.57中使用Spring 4.0.6.RELEASE。我已将这些Apache依赖项添加到pom文件中: <!-- Apache Commons FileUpload --> <dependency> <groupId>commons-fileupload</groupId>

我试图使用Spring和CommonsMultipartResolver创建一个上传文件的简单表单

我在Tomcat v7.0.57中使用Spring 4.0.6.RELEASE。我已将这些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>
如果我将maxUploadSize设置为较小的值(即1mb),并上载一个稍大一点的文件(我用一个1.7mb的文件进行了测试),这将正常工作,并显示页面,向用户显示错误。但是,对于5MB的更大限制,如果我上载的文件仅比限制大几个字节,我的resolveException方法会被多次调用,但页面不会被加载。我使用Chrome和Firefox进行了测试。在Firefox中,我得到一个错误,说“连接已重置”。在“网络”选项卡中,它显示该帖子已“中止”。在Chrome中,我收到一个错误,说“此网页不可用”,错误代码为:ERR\u CONNECTION\u RESET。在网络标签中,帖子简单地说它“失败了”

我的猜测是,对于较大的文件上载,它会在完成之前取消文件上载,这是我希望保留的行为。但是,在这些情况下,我仍然希望向用户显示一个更好的错误


我尝试将CommonsMultipartResolver的maxInMemorySize属性增加到10mb,但这似乎没有任何效果。有人能帮我找出哪里出了问题吗?

终于找到了问题所在。它实际上与HandlerExceptionResolver无关,似乎是由于我正在使用的Tomcat版本(7.0.57)中的一个设置。在server.xml中,我必须在我的连接器上指定“max燕子大小”属性

根据Tomcat文档,MaxEnswentSize是“请求正文字节的最大数量(不包括传输编码开销)”这将被Tomcat吞并以中止上载。中止上载是指Tomcat知道请求正文将被忽略,但客户端仍发送请求正文。如果Tomcat不吞并正文,客户端不太可能看到响应。如果未指定默认值2097152(2 MB)将使用。小于零的值表示不应强制执行限制。“


您能否添加更多详细信息,如spring版本、apache commons版本、用于测试的浏览器等,您是如何做到的?我是说你说的?如果你能写的话。。非常有帮助。下面是my server.xml的相关部分:
<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;
}