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

在项目中使用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:拦截器处理
首先把<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <!-- 单文件上传大小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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值