文档章节

关于spring mvc MaxUploadSizeExceededException 死循环解决方

凉粉
 凉粉
发布于 2015/10/29 18:29
字数 364
阅读 3937
收藏 3

当看到这文章的时候相信你现在应该遇到这样的问题了,我也是自己遇到了后来找到解决方案了记录下来,如果下次遇到就可以直接解决了。

至于为什么会出现这样的情况,可以看这篇文章:https://bz.apache.org/bugzilla/show_bug.cgi?id=57438

这些一个tomcat bug,但不知道什么版本解决了这个问题。所以下面用了另外一个方法搞定它。

<!-- 多部分文件上传 -->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 最大上传大小,不能超过40M  @see #FileUploadInterceptor -->
        <property name="maxUploadSize" value="41943040"/>
        <property name="maxInMemorySize" value="4096"/>
        <property name="defaultEncoding" value="UTF-8"/>
    </bean>

首先,把maxUploadSize 设置大一点,让它不会抛异常出来。

然后创建一个拦截器控制上传大小,然后抛出同样的异常出来,或者也可以直接在拦截器中处理异常

public class FileUploadInterceptor implements HandlerInterceptor {
    private long maxSize;

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        if(request!=null && ServletFileUpload.isMultipartContent(request)) {
            ServletRequestContext ctx = new ServletRequestContext(request);
            long requestSize = ctx.contentLength();
            if (requestSize > maxSize) {
                throw new MaxUploadSizeExceededException(maxSize);
            }
        }
        return true;
    }


    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    }

    public void setMaxSize(long maxSize) {
        this.maxSize = maxSize;
    }
}

然后再applicationContext.xml中配置

<mvc:interceptor>
            <mvc:mapping path="/**"/>
            <bean class="com.lvrounet.peiniang.interceptor.FileUploadInterceptor">
                <property name="maxSize" value="4194304"/>
            </bean>
        </mvc:interceptor>

拦截器中可以根据需求配置上传的大小了。

© 著作权归作者所有

凉粉
粉丝 17
博文 28
码字总数 6212
作品 3
成都
程序员
私信 提问
加载中

评论(4)

拿客-三产
拿客-三产
为啥我试的都拦截不到请求呢
iron_will
iron_will
此方法有效,谢谢楼主。
iron_will
iron_will

引用来自“njust_blue”的评论

终于找到正解了,用此方法算是解决了,虽然超过拦截器里设置的大小后台还是会报错,但至少不会重置连接了,我被那net::ERR_CONNECTION_RESET真是搞死了。我印象中tomcat7.0.39没有此问题(没有亲测),反而是高版本会有这个问题,反正我试了7.0.64和67都不行
已测,tomcat7.0.39 没有问题!!
njust_blue
njust_blue
终于找到正解了,用此方法算是解决了,虽然超过拦截器里设置的大小后台还是会报错,但至少不会重置连接了,我被那net::ERR_CONNECTION_RESET真是搞死了。我印象中tomcat7.0.39没有此问题(没有亲测),反而是高版本会有这个问题,反正我试了7.0.64和67都不行
springMVC笔记系列(23)——拦截器及其在乱码问题和登录问题的应用实现

拦截器的概念 A:“什么是拦截器?” B:“拦截器是通过统一拦截从客户端发往服务器的请求来完成功能的增强。” A:(一脸懵逼) B:“说得简单点,拦截器就是在客户端向服务器端发出请求的期间...

HappyBKs
2016/07/12
1K
3
springfox-swagger2 2.6.1 整合springmvc 3.2

1、加入springfox依赖 2、配置org.springframework.web.accept.ContentNegotiationManagerFactoryBean,否则会报错。确保applicationContext.xml 中 xsi:schemaLocation 的 http://www.sprin......

laolin23
2018/11/01
77
0
servlet 拦截所有请求之后如何做分发

最近犯了迷糊,写了一个servlet urlmapping配置成/*,如果是访问jsp,则直接转发这个请求,但是又会被这个servlet拦截到,因此陷入了死循环,看了一个spring mvc ,如果controller使用redirect的...

java9
2013/04/12
4.2K
9
Spring 源码(八)循环依赖

循环依赖是指两个或者多个Bean之前相互持有对方。在Spring中循环依赖一般有三种方式: 构造函数循环依赖 setter方法循环依赖 prototype 范围的依赖处理 构造函数循环依赖 在Spring中构造函数...

xiaolyuh
09/28
1K
1
【死磕 Spring】—– IOC 之开启 bean 的加载

原文出自:http://cmsblogs.com (此图来自《Spring 揭秘》) Spring IOC 容器所起的作用如上图所示,它会以某种方式加载 Configuration Metadata,将其解析注册到容器内部,然后回根据这些信息...

chenssy
2018/10/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

教你玩转Linux—添加批量用户

添加和删除用户对每位Linux系统管理员都是轻而易举的事,比较棘手的是如果要添加几十个、上百个甚至上千个用户时,我们不太可能还使用useradd一个一个地添加,必然要找一种简便的创建大量用户...

xiangyunyan
13分钟前
3
0
返回提示信息,如:xxx创建成功!

【服务端】在输出的方法块中,加入要输出的字段(qcm_batch_id) QCMUserType.cs: public struct QCM_Custom_Create_Batch_Out_Tag { public BASCoreType.Cmn_Out_T......

_Somuns
13分钟前
3
0
Aliyun Serverless VSCode Extension v1.12.0 发布

Aliyun Serverless VSCode Extension 是阿里云 Serverless 产品 函数计算 Function Compute 的 VSCode 插件,该插件结合了函数计算 Fun 工具以及函数计算 SDK ,是一款 VSCode 图形化开发调试...

阿里云官方博客
14分钟前
4
0
程序员如何培养解决复杂问题的能力?

今天在上网时候,突然看到了这篇文章,感觉非常的适合现在的自己去思考下,可能也适用在座的读者。程序员不仅仅是敲代码,更是一个复合能力的结合体,也不仅仅停留在技术和代码阶段。你想要成...

哥本哈根的小哥
17分钟前
5
0
市场变化驱动产品思维升级

宜信科技中心财富管理产品部负责人Bob,与大家一起聊聊个性化推荐产品功能的设计和B端产品的功能策划方式。 拓展阅读:回归架构本质,重新理解微服务 智慧金融时代,大数据和AI如何为业务赋能...

宜信技术学院
18分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部