【转自】https://my.oschina.net/ironwill/blog/646762

springMVC是一个非常方便的web层框架,我们使用它的文件上传也非常的方便。

我们通过下面的配置来使用springMVC文件上传功能。

<bean id="multipartResolver" class="com.youth.controller.fileupload.MultipartListenerResolver">
<!-- 设置上传文件的最大尺寸为10M -->
<property name="maxUploadSize" value="10240"/>
<property name="maxInMemorySize" value="4096"/>
<property name="defaultEncoding" value="UTF-8"/>
<property name="resolveLazily" value="true"/>
</bean>

Controller层我们这样接收文件

@RequestMapping("fileUpload")
public void fileUpload(@RequestParam("myFile") MultipartFile multipartFile) throws Exception{
String fileName = multipartFile.getOriginalFilename();
File f = createFile(fileName);
multipartFile.transferTo(f);
}

页面上记得指定enctype属性哦

<form method="post" enctype="multipart/form-data"></form>

如果你的springMVC配置是正确的,那么到此springMVC的文件上传功能已经可以用了。一切都很完美。

由于我们配置了maxUploadSize属性,那么如果我们的文件超过了10M会出现什么情况呢?

理论上系统会抛出MaxUploadSizeExceededException异常,那么如何处理呢?

springMVC异常处理的配置方式如下:

<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="java.lang.Exception">redirect:/error.jsp</prop>
<prop key="org.springframework.web.multipart.MaxUploadSizeExceededException">redirect:/MaxUploadSizeError.jsp</prop>
</props>
</property>
<property name="defaultErrorView" value="redirect:/error.jsp"></property>
<property name="defaultStatusCode" value="500"></property>
</bean>

上面的配置作用是如果系统抛出MaxUploadSizeExceededException异常,系统跳转到MaxUploadSizeError.jsp页面给用户以提示。

如果是其他Exception异常,则跳转到error.jsp页面。

接下来我们测试一下上面的异常处理是否生效了。

在你的代码任意地方试着抛出NullPointException异常,发现页面的确能跳转到error.jsp,证明我们的异常处理是生效的。

然后我们上传一个10M以上的文件,我们发现后台控制台抛出了MaxUploadSizeExceededException异常,我们期待着页面转向到MaxUploadSizeError.jsp。

但是很遗憾,页面并没有跳转,页面出现了这个

why? why? 你搜遍网上的相关配置,发现就是这么配置的不会错,但就是不!生!效!why!why!why!


我也是被这个问题坑了很久,经过多次搜索、研究,总算得出了一个让自己满意的结果。

想想网上那些关于springMVC文件上传文件过大时捕获异常的配置,我心里想说,你们的配置真的生效吗?到底咋生效的??我的咋就不生效呢???


关于这个问题,有人说这是tomcat的一个bug,参见:https://bz.apache.org/bugzilla/show_bug.cgi?id=57438,但官方似乎说这不是tomcat的bug。

事实上只要你使用apache-tomcat-7.0.39这个版本的tomcat,上面的配置就是正确的,

如果是其他版本的tomcat,那么就会出现上面说的ERR_CONNECTION_RESET的问题。

我试了其他版本的tomcat和tomcat-8.0.32,都会出现以上问题。

所以你可以更换你的tomcat来解决这个问题。但显然这不是一个好的解决方案。


还有一个相对完美的解决方案就是使用sprngMVC拦截器。

1.更改你的MultipartListenerResolver的maxUploadSize属性,使其尽量大,避免上传文件时异常被springMVC框架抛出

2.在springmvc-servlet.xml文件中加入拦截器配置,如下:

<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**" />
<bean class="com.youth.controller.fileupload.FileUploadInterceptor">
<!-- 1M -->
<property name="maxSize" value="1048576" />
</bean>
</mvc:interceptor>
</mvc:interceptors>

注意这里的maxSize才是允许上传的最大文件大小。 FileUploadInterceptor.java代码如下

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

到此为止,springMVC限制文件上传大小的问题就介绍完了。另介绍一个js判断上传文件大小的方法

function checkFileSize(eleId) {
var allowSize = 10*1024*1024;// 10M
var size = $("#" + eleId)[0].files[0].size;
if (size > allowSize) {
alert("文件大小限制在10M以内");
return false;
}
return true;
}

springMVC文件上传大小超过限制的问题的更多相关文章

  1. [转载]windows 7 IIS 7.5 ASP.Net 文件上传大小限制

    原文出处: 原文作者:云中岳 原文链接:http://www.cnblogs.com/netlover/archive/2011/07/08/Win7_IIS_Upload.html IS 7 默认文 ...

  2. struts2文件上传大小限制问题小结

    一:首先看一下程序执行中出现的对应报错信息,如下所示: [WARN ] 2015-03-03 15:31:11 :Unable to parse request org.apache.commons. ...

  3. struts2文件上传大小限制问题小结(引用)

    最后解决办法: 页面js控制上传文件的大小,在页面进行控制.如下代码 inputs是所有文本上传input DOM //名称信息 var nameStr=''; //大小信息 var sizeStr= ...

  4. springmvc文件上传下载简单实现案例(ssm框架使用)

    springmvc文件上传下载实现起来非常简单,此springmvc上传下载案例适合已经搭建好的ssm框架(spring+springmvc+mybatis)使用,ssm框架项目的搭建我相信你们已经搭 ...

  5. zt对于C#中的FileUpload解决文件上传大小限制的问题设置

    对于C#中的FileUpload解决文件上传大小限制的问题设置 您可能没意识到,但对于可以使用该技术上载的文件的大小存在限制.默认情况下,使用 FileUpload 控件上载到服务器的文件最大为 4M ...

  6. struts2设置文件上传大小

    利用struts2想要设置或者限制上传文件的大小,可以在struts.xml配置文件里面进行如下配置: <constant name="struts.multipart.maxSize ...

  7. IIS文件上传大小修改配置说明

    原因:Web 服务器上的请求筛选被配置为拒绝该请求,因为内容长度超过配置的值(IIS 7 默认文件上传大小时30M). 解决:IIS7更改asp.net文件上传大小限制 步骤如下: 1.    修改I ...

  8. springmvc文件上传AND jwt身份验证

    SpringMVC文件上传 思路:1.首先定义页面,定义多功能表单(enctype=“multipart/form-data”)2.在Controller里面定义一个方法,用参数(MultipartF ...

  9. IIS 6和IIS 7 中设置文件上传大小限制设置方法,两者是不一样的

    在IIS 6.0中设置文件上传大小的方法,只要设置httpRuntime就可以了 <system.web> <httpRuntime executionTimeout="3 ...

随机推荐

  1. CVE-2017-6920 Drupal远程代码执行漏洞学习

     1.背景介绍: CVE-2017-6920是Drupal Core的YAML解析器处理不当所导致的一个远程代码执行漏洞,影响8.x的Drupal Core. Drupal介绍:Drupal 是一个由 ...

  2. wms-ssv数据字典

    --------------------------------------------以下,托盘-- dbo.Container --托盘 , "托盘状态", "Con ...

  3. [转]Using OData from ASP.NET

    本文转自:http://www.drdobbs.com/windows/using-odata-from-aspnet/240168672 By Gastón Hillar, July 01, 201 ...

  4. Shiro - 与Spring集成

    本文是针对web应用web.xml: <filter> <filter-name>shiroFilter</filter-name> <filter-clas ...

  5. <<数学传奇>>概述

    简介 在网易公开课上看完了蔡天新教授的<<数学传奇>>,课程共10集.分别讲述了古希腊的毕达哥拉斯.波斯(伊朗)的 花拉子密和欧玛尔.海亚姆.中国的秦九韶.英国的牛顿.法国的笛 ...

  6. HDU4652:Dice

    题面 传送门 题意 \(m\)面的骰子 求连续出现\(n\)个相同面的期望次数 或者 求连续出现\(n\)个不同面的期望次数 Sol 设\(f[i]\)表示已经出现了\(i\)~\(n\)这些面相同的 ...

  7. Memcache 学习笔记(二)---- PHP 脚本操作 Memcache 服务器

     PHP 脚本操作 Memcache 服务器 一.PHP脚本操作Memcache方法 使用 PHP 脚本操作 Memcache,在 PHP 手册中有详细的介绍,我们可以实例化 Memcache 类,根 ...

  8. html简介(自己理解和老师讲课)

    首先讲开发网页三种技术:html,css,javascript.html负责网页的结构,css站在没学角度对网页进行美化,javascript负责网页交互,站在用户体验角度设计网页交互效果 而我们所学 ...

  9. Java 文件上传与下载、email

    1. 文件上传与下载 1.1 文件上传 文件上传,要点: 前台: 1. 提交方式:post 2. 表单中有文件上传的表单项: <input type="file" /> ...

  10. git使用笔记 bitbucket基本操作

    实现目标: 1.将本地已经存在的项目文件保存到 bitbucket.org 2.从 bitbucket.org 检出代码库到本地 操作笔记: 1.首先在bitbucket.org创建一个代码库,并得到 ...