天天看点

SpringMVC ajaxFileUploa上传文件出现 Provisional headers are shown 和 response 数据 无法输出问题...

在项目中使用springMVC 上传文件的时候,在上传文件的大小超过设定的值之后,异常解析器中的异常输出信息无法输出。

上传文件的时候有个文件大小的限制,在超出这个限制之后.会抛出MaxUploadSizeExceededException异常,该异常是spring检查上传文件的信息的时候抛出的,此时还没进入Controller内解析文件的方法中。

产生原因:tomcat7.0.65版本的bug。

a:超过文件大小的:

SpringMVC ajaxFileUploa上传文件出现 Provisional headers are shown 和 response 数据 无法输出问题...
SpringMVC ajaxFileUploa上传文件出现 Provisional headers are shown 和 response 数据 无法输出问题...

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; }

继续阅读