在项目中使用springMVC 上传文件的时候,在上传文件的大小超过设定的值之后,异常解析器中的异常输出信息无法输出。
上传文件的时候有个文件大小的限制,在超出这个限制之后.会抛出MaxUploadSizeExceededException异常,该异常是spring检查上传文件的信息的时候抛出的,此时还没进入Controller内解析文件的方法中。
产生原因:tomcat7.0.65版本的bug。
a:超过文件大小的:
b:没超过限定大小的文件上传成功之后返回数据正确.
解决方式:
1:
更换tomcat版本。
apache-tomcat-7.0.67 (不可用)
apache-tomcat-7.0.65 (不可用)
apache-tomcat-7.0.38(可用)
apache-tomcat-7.0.39 (可用)
apache-tomcat-7.0.70 (可用) 2:拦截器处理
<!-- 单文件上传大小20M ,这里需要设置的大一点,避免在拦截器之前出现异常,很重要,这里是400M-->
<!--maxUploadSize 使用拦截器时可以不用设置-->
<property name="maxUploadSize" value="409715200"/>
<property name="defaultEncoding" value="UTF-8" />
</bean>
中的最大上传值弄大一点,避免抛出异常
<mvc:interceptors> <mvc:interceptor> <!--此处只拦截文件上传的请求--> <mvc:mapping path="/file/fileUpload.do"/> <bean class="com.sso.interceptor.FileInterceptor"> <property name="MAX_UPLOAD_SIZE" value="20971520"/> </bean> </mvc:interceptor> </mvc:interceptors>
创建拦截器 FileInterceptor.Java public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { //判断是否是多文件上传的请求 if (request != null && ServletFileUpload.isMultipartContent(request)) { ServletRequestContext requestContext = new ServletRequestContext(request); long requsetSize = requestContext.getContentLength(); if (requsetSize > MAX_UPLOAD_SIZE) { ObjectMapper mapper = new ObjectMapper(); response.setContentType(MediaType.APPLICATION_JSON_VALUE); PrintWriter writer = response.getWriter(); //json输出提示信息 JSONObject json = new JSONObject(); json.put("message", "上传文件太大,不能超过" + maxSize / 1024 / 1024 + "M !"); json.put("status", "1"); mapper.writeValue(writer,json); writer.flush(); return false; } } return true; }