springMVC文件上传大小超过限制的问题
【转自】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文件上传大小超过限制的问题的更多相关文章
- [转载]windows 7 IIS 7.5 ASP.Net 文件上传大小限制
原文出处: 原文作者:云中岳 原文链接:http://www.cnblogs.com/netlover/archive/2011/07/08/Win7_IIS_Upload.html IS 7 默认文 ...
- struts2文件上传大小限制问题小结
一:首先看一下程序执行中出现的对应报错信息,如下所示: [WARN ] 2015-03-03 15:31:11 :Unable to parse request org.apache.commons. ...
- struts2文件上传大小限制问题小结(引用)
最后解决办法: 页面js控制上传文件的大小,在页面进行控制.如下代码 inputs是所有文本上传input DOM //名称信息 var nameStr=''; //大小信息 var sizeStr= ...
- springmvc文件上传下载简单实现案例(ssm框架使用)
springmvc文件上传下载实现起来非常简单,此springmvc上传下载案例适合已经搭建好的ssm框架(spring+springmvc+mybatis)使用,ssm框架项目的搭建我相信你们已经搭 ...
- zt对于C#中的FileUpload解决文件上传大小限制的问题设置
对于C#中的FileUpload解决文件上传大小限制的问题设置 您可能没意识到,但对于可以使用该技术上载的文件的大小存在限制.默认情况下,使用 FileUpload 控件上载到服务器的文件最大为 4M ...
- struts2设置文件上传大小
利用struts2想要设置或者限制上传文件的大小,可以在struts.xml配置文件里面进行如下配置: <constant name="struts.multipart.maxSize ...
- IIS文件上传大小修改配置说明
原因:Web 服务器上的请求筛选被配置为拒绝该请求,因为内容长度超过配置的值(IIS 7 默认文件上传大小时30M). 解决:IIS7更改asp.net文件上传大小限制 步骤如下: 1. 修改I ...
- springmvc文件上传AND jwt身份验证
SpringMVC文件上传 思路:1.首先定义页面,定义多功能表单(enctype=“multipart/form-data”)2.在Controller里面定义一个方法,用参数(MultipartF ...
- IIS 6和IIS 7 中设置文件上传大小限制设置方法,两者是不一样的
在IIS 6.0中设置文件上传大小的方法,只要设置httpRuntime就可以了 <system.web> <httpRuntime executionTimeout="3 ...
随机推荐
- CVE-2017-6920 Drupal远程代码执行漏洞学习
1.背景介绍: CVE-2017-6920是Drupal Core的YAML解析器处理不当所导致的一个远程代码执行漏洞,影响8.x的Drupal Core. Drupal介绍:Drupal 是一个由 ...
- wms-ssv数据字典
--------------------------------------------以下,托盘-- dbo.Container --托盘 , "托盘状态", "Con ...
- [转]Using OData from ASP.NET
本文转自:http://www.drdobbs.com/windows/using-odata-from-aspnet/240168672 By Gastón Hillar, July 01, 201 ...
- Shiro - 与Spring集成
本文是针对web应用web.xml: <filter> <filter-name>shiroFilter</filter-name> <filter-clas ...
- <<数学传奇>>概述
简介 在网易公开课上看完了蔡天新教授的<<数学传奇>>,课程共10集.分别讲述了古希腊的毕达哥拉斯.波斯(伊朗)的 花拉子密和欧玛尔.海亚姆.中国的秦九韶.英国的牛顿.法国的笛 ...
- HDU4652:Dice
题面 传送门 题意 \(m\)面的骰子 求连续出现\(n\)个相同面的期望次数 或者 求连续出现\(n\)个不同面的期望次数 Sol 设\(f[i]\)表示已经出现了\(i\)~\(n\)这些面相同的 ...
- Memcache 学习笔记(二)---- PHP 脚本操作 Memcache 服务器
PHP 脚本操作 Memcache 服务器 一.PHP脚本操作Memcache方法 使用 PHP 脚本操作 Memcache,在 PHP 手册中有详细的介绍,我们可以实例化 Memcache 类,根 ...
- html简介(自己理解和老师讲课)
首先讲开发网页三种技术:html,css,javascript.html负责网页的结构,css站在没学角度对网页进行美化,javascript负责网页交互,站在用户体验角度设计网页交互效果 而我们所学 ...
- Java 文件上传与下载、email
1. 文件上传与下载 1.1 文件上传 文件上传,要点: 前台: 1. 提交方式:post 2. 表单中有文件上传的表单项: <input type="file" /> ...
- git使用笔记 bitbucket基本操作
实现目标: 1.将本地已经存在的项目文件保存到 bitbucket.org 2.从 bitbucket.org 检出代码库到本地 操作笔记: 1.首先在bitbucket.org创建一个代码库,并得到 ...