spring+commons-fileupload上传文件大小限制异常捕获

WYH_D_VOID 2014-08-25 04:29:48
配置文件中如下配置
 <!-- SpringMVC上传文件时,需要配置MultipartResolver处理器 -->  
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="UTF-8"/>
<!-- 指定所上传文件的总大小不能超过200KB。注意maxUploadSize属性的限制不是针对单个文件,而是所有文件的容量之和 -->
<property name="maxUploadSize" value="2000"/>
<!--resolveLazily属性启用是为了推迟文件解析,以便在UploadController 中捕获文件大小异常-->
<property name="resolveLazily" value="true"/>
</bean>


在Controller中,采用@ExceptionHandler处理异常
/**
* 异常处理
* @param ex
* @param request
* @Description:
*/
@ExceptionHandler(Exception.class)
public void handleException(Exception ex,HttpServletRequest request,HttpServletResponse response){
StringBuffer sb = new StringBuffer();
sb.append("<script language='javascript'>history.go(-1);alert('");
if (ex instanceof org.springframework.web.multipart.MaxUploadSizeExceededException){
sb.append("文件大小不应大于"+((MaxUploadSizeExceededException)ex).getMaxUploadSize()/1000+"kb");
} else{
sb.append("上传异常!");
}
sb.append("!');</script>");
try {
System.out.println(sb.toString());
response.setContentType("text/html; charset=utf-8");
response.getWriter().println(sb.toString());
response.getWriter().flush();
} catch (IOException e) {
e.printStackTrace();
}
return;
}

上传文件大小限制为200kb,上传一个1-3MB大小的文件,会正常执行,在页面上弹出提示

但是如果上传一个比较大的文件,比如40MB的,就会出现
ReadResponse() failed: The server did not return a response for this request. Server returned 0 bytes.



控制台如下:
2014-08-25 16:26:48 [org.springframework.web.servlet.DispatcherServlet]-[DEBUG] DispatcherServlet with name 'spring' processing POST request for [/mabaobang/user/fileUpload.do]
2014-08-25 16:26:48 [org.springframework.beans.factory.support.DefaultListableBeanFactory]-[DEBUG] Creating instance of bean 'userController'
2014-08-25 16:26:48 [org.springframework.beans.factory.annotation.InjectionMetadata]-[DEBUG] Processing injected method of bean 'userController': AutowiredFieldElement for private cn.service.UserService cn.controller.UserController.userService
2014-08-25 16:26:48 [org.springframework.beans.factory.support.DefaultListableBeanFactory]-[DEBUG] Returning cached instance of singleton bean 'userServiceImpl'
2014-08-25 16:26:48 [org.springframework.beans.factory.support.DefaultListableBeanFactory]-[DEBUG] Finished creating instance of bean 'userController'
2014-08-25 16:26:48 [org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping]-[DEBUG] Mapping [/user/fileUpload.do] to HandlerExecutionChain with handler [cn.controller.UserController@606d2f39] and 1 interceptor
2014-08-25 16:26:48 [org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver]-[DEBUG] Resolving exception from handler [cn.controller.UserController@606d2f39]: org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size of 2000 bytes exceeded; nested exception is org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (43062423) exceeds the configured maximum (2000)
2014-08-25 16:26:48 [org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver]-[DEBUG] Invoking request handler method: public void cn.controller.UserController.handleException(java.lang.Exception,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
<script language='javascript'>history.go(-1);alert('文件大小不应大于2kb!');</script>
2014-08-25 16:26:48 [org.springframework.web.servlet.DispatcherServlet]-[DEBUG] Null ModelAndView returned to DispatcherServlet with name 'spring': assuming HandlerAdapter completed request handling
2014-08-25 16:26:48 [org.springframework.web.multipart.commons.CommonsMultipartResolver]-[WARN] Failed to perform multipart cleanup for servlet request
org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size of 2000 bytes exceeded; nested exception is org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (43062423) exceeds the configured maximum (2000)
at org.springframework.web.multipart.commons.CommonsMultipartResolver.parseRequest(CommonsMultipartResolver.java:160)
at org.springframework.web.multipart.commons.CommonsMultipartResolver$1.initializeMultipart(CommonsMultipartResolver.java:131)
at org.springframework.web.multipart.support.AbstractMultipartHttpServletRequest.getMultipartFiles(AbstractMultipartHttpServletRequest.java:119)
at org.springframework.web.multipart.support.AbstractMultipartHttpServletRequest.getMultiFileMap(AbstractMultipartHttpServletRequest.java:99)
at org.springframework.web.multipart.commons.CommonsMultipartResolver.cleanupMultipart(CommonsMultipartResolver.java:188)
at org.springframework.web.servlet.DispatcherServlet.cleanupMultipart(DispatcherServlet.java:1062)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:955)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:838)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
Caused by: org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (43062423) exceeds the configured maximum (2000)
at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:965)
at org.apache.commons.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:310)
at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:334)
at org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:115)
at org.springframework.web.multipart.commons.CommonsMultipartResolver.parseRequest(CommonsMultipartResolver.java:156)
... 36 more
2014-08-25 16:26:48 [org.springframework.web.servlet.DispatcherServlet]-[DEBUG] Successfully completed request
...全文
4831 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Marvel__Dead 2017-05-10
  • 打赏
  • 举报
回复
引用 4 楼 qq_15915835 的回复:
不要挖坟啊。。2014年的。你怎么挖到的
现在2017年
云中鵟 2016-10-20
  • 打赏
  • 举报
回复
解决了没,怎么解决的,能不能说一声啊
qq_15915835 2016-06-02
  • 打赏
  • 举报
回复
不要挖坟啊。。2014年的。你怎么挖到的
nanfu08 2016-06-02
  • 打赏
  • 举报
回复
问题解决了嘛
其所以然 2016-05-19
  • 打赏
  • 举报
回复
请问怎么解决的?
WYH_D_VOID 2014-08-25
  • 打赏
  • 举报
回复
顺便一说,如果在异常捕获的方法中加入
try {
                Thread.sleep(1*1000);
            } catch (InterruptedException e1) {
                e1.printStackTrace();
            }
就不会出现 ReadResponse() failed: The server did not return a response for this request. Server returned 0 bytes.! 求解!

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧