spring mvc CommonsMultipartResolver上传文件异常处理
近期已经上线的项目出现了一个异常
严重: Servlet.service() for servlet JeeCmsAdmin threw exception
org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (2152078) exceeds the configured maximum (2097152)
at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:914)
at org.apache.commons.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:331)
at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:349)
at org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126)
at org.springframework.web.multipart.commons.CommonsMultipartResolver.parseRequest(CommonsMultipartResolver.java:155)
at org.springframework.web.multipart.commons.CommonsMultipartResolver.resolveMultipart(CommonsMultipartResolver.java:138)
这个异常是由于上传文件过大引起来的,这里指的是上传文件的总量,而不是单个的文件。
由于之前已经对上传文件在控制器进行过单个验证,但是此异常是在请求还未到达控制器的时候就已经被spring容器捕获抛出异常了,故无法在控制器对进行文件校验
<bean id="multipartResolver" class="com.sinolife.sf.framework.comm.CommonsMultipartResolver">
<property name="maxUploadSize" value="50946048" />
<property name="resolveLazily" value="true"/>
</bean>
这时就想在前台对文件进行大小校验,但是由于需要兼容的浏览器较多,纯前端代码无法完全适应浏览器的兼容器,不得不放弃放弃了JS校验。
最后在控制器中使用注解拦截了异常,对其进行处理
@ExceptionHandler(MaxUploadSizeExceededException.class)
public String handleException(Exception ex,HttpServletRequest request,HttpServletResponse response) {
StringBuffer sb = new StringBuffer();
// sb.append("<script language='javascript'>history.go(-1);alert('");
// if (ex instanceof org.springframework.web.multipart.MaxUploadSizeExceededException){
// sb.append("文件大小不应大于"+getFileKB(((MaxUploadSizeExceededException)ex).getMaxUploadSize()));
// }
// sb.append("');");
// sb.append("</script>");
//
// try {
// System.out.println(sb.toString());
// response.setContentType("text/html; charset=utf-8");
// response.getWriter().println(sb.toString());
// response.getWriter().flush();
// } catch (IOException e) {
// e.printStackTrace();
// }
// return;
}
这样虽然捕获了异常,对其进行了处理,但是用户体验不怎么好,下一篇利用iframe实现无刷新上传处理
最后再给出起初利用JS进行文件大小校验的代码
<img alt="" src="" id="temping" style="display: none;"> var maxsize = 10*1024*1024;//2M
var errMsg = "上传的附件文件不能超过2M!!!";
var tipMsg = "您的浏览器暂不支持计算上传文件的大小,确保上传文件不要超过2M,建议使用IE、FireFox、Chrome浏览器。";
var browserCfg = {};
var ua = window.navigator.userAgent;
if (ua.indexOf("MSIE")>=1){
browserCfg.ie = true;
}else if(ua.indexOf("Firefox")>=1){
browserCfg.firefox = true;
}else if(ua.indexOf("Chrome")>=1){
browserCfg.chrome = true;
} try{
var obj_file = document.getElementById("chargeFront");
if(obj_file.value==""){
alert("请先选择上传文件");
return;
} var filesize = 0;
if(browserCfg.firefox || browserCfg.chrome ){
filesize = obj_file.files[0].size;
}else if(browserCfg.ie){
var obj_img = document.getElementById('temping');
alert('浏览器判断2' + obj_file.value);
obj_img.src =obj_file.value;
filesize = obj_img.fileSize;
alert(filesize); var fso,f,fname,fsize;
var flength=40000; //设置上传的文件最大值(单位:kb),超过此值则不上传。
fso=new ActiveXObject("Scripting.FileSystemObject");
f=fso.GetFile(obj_file.value);//文件的物理路径
fsize=f.Size; //文件大小(bit)
fsize=fsize/1024;
//去掉注释,可以测试
alert("文件路径:"+f);
alert("文件名:"+fname);
alert("文件大小:"+fsize+"kb");
}else{
alert("非IE 谷歌" + tipMsg);
return;
} if(filesize==-1){
alert("-1的情况"+tipMsg);
return;
}else if(filesize>maxsize){
alert("不是-1的情况" + errMsg);
return;
}else{
alert("文件大小符合要求");
return;
}
}catch(e){
alert(e);
}
博客地址:http://qiaoyihang.iteye.com/
spring mvc CommonsMultipartResolver上传文件异常处理的更多相关文章
- spring mvc(注解)上传文件的简单例子
spring mvc(注解)上传文件的简单例子,这有几个需要注意的地方1.form的enctype=”multipart/form-data” 这个是上传文件必须的2.applicationConte ...
- 利用spring的CommonsMultipartResolver上传文件
1.CommonsMultipartResolver是spring里面提供的一个上传方式,效率我不知道,但是加入spring容器管理还是很不错的. 2.先看依赖包pom.xml <project ...
- spring mvc MultipartFile 上传文件 当文件较小时(10k) ,无法上传成功 。
<!-- SpringMVC上传文件时,需要配置MultipartResolver处理器 --> <bean id="multipartResolver" cla ...
- spring mvc + ajax上传文件,页面局部刷新
1.点击上传按钮进行如下操作,通过表单名称以及input名称获取相应的值,对于上传的文件,使用.files来获取, 因为包含文件的上传,所以采用FormData的形式来进行数据交互,通过append将 ...
- java spring mvc restful 上传文件
spring mvc 配置文件 <bean class="com.baiyyy.yfz.core.RestfulHandlerMethodMapping" /> ...
- spring mvc MultipartFile 上传文件错误解决
Field error in object 'xxxx' on field 'xxxx': rejected value [20129259128131.jpg]; codes [typeMismat ...
- Spring MVC实现上传文件报错解决方案
报错代码: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.sp ...
- spring mvc 图片上传,图片压缩、跨域解决、 按天生成文件夹 ,删除,限制为图片代码等相关配置
spring mvc 图片上传,跨域解决 按天生成文件夹 ,删除,限制为图片代码,等相关配置 fs.root=data/ #fs.root=/home/dev/fs/ #fs.root=D:/fs/ ...
- DiskFileUpload上传与Spring的CommonsMultipartResolver上传对比
最近在做一个小小的上传功能竟被虐得体无完肤, 在使用tomcat内置的DiskFileUpload获取前台jsp传来的附件参数和其他表单参数, 竟然出现莫名其妙的乱码问题, 即使tomcat的serv ...
随机推荐
- 如何向非技术人(程序猿)解释SQL注入?
前两天看博客园新闻,有一篇文章名为<我该如何向非技术人解释SQL注入?>(http://kb.cnblogs.com/page/515151/).是一个外国人写的,伯乐在线翻译的.我当时看 ...
- 【译】About the Java Technology
About the Java Technology Java technology is both a programming language and a platform. The Java Pr ...
- FreeBSD应该装gnome3做桌面
目前freebsd pkg包管理体系的repo源多了一些,速度快了很多. 仓库中目前的版本为3.14,安装gnome3很简单. pkg install xorg gnome3 echo "e ...
- Appcelerator Titanium Studio: JNI_CreateJavaVM missing error
Mac升级到Yosemite后,Titanium Studio启动不了,报Appcelerator Studio: JNI_CreateJavaVM missing error 之类的错误,重装了Or ...
- Time series database
https://en.wikipedia.org/wiki/Time_series_database https://influxdb.com/docs/v0.9/introduction/getti ...
- [mysql] 查看mysql执行时间
mysql的 profiling不是默认打开的 查看profiling是否找开 mysql> show variables like "%pro%"; +---------- ...
- Release编译模式下,事件是否会引起内存泄漏问题初步研究
题记:不常发生的事件内存泄漏现象 想必有些朋友也常常使用事件,但是很少解除事件挂钩,程序也没有听说过内存泄漏之类的问题.幸运的是,在某些情况下,的确不会出问题,很多年前做的项目就跑得好好的,包括我也是 ...
- JavaScript学习(2):对象、集合以及错误处理
在这篇文章里,我们讨论一下JavaScript中的对象.数组以及错误处理. 1. 对象 对象是JavaScript中的一种基本类型,它内部包含一些属性,我们可以对这些属性进行增删操作. 1.1 属性 ...
- 25款专业的 WordPress 电子商务网站主题
WordPress 作为最流行的博客系统,插件众多,易于扩充功能.安装和使用都非常方便,而且有许多第三方开发的免费模板,安装方式简单易用.这篇文章和大家分享35款专业的 WordPress 电子商务网 ...
- Google Web Designer – 创建引人入胜的 HTML5 网站
Google Web Designer 可以帮助你创建引人入胜,互动的基于 HTML5 的设计和动画,可以在任何设备上运行.如果你喜欢自己动手,设计背后的所有的代码都是可以手工编辑的. 虽然可视化工具 ...