SpringMVC获取文件上传大小设置
来源:互联网 发布:成都做seo外包的 编辑:程序博客网 时间:2024/06/03 22:07
在做文件上传功能时,我们可能需要限制单次可上传文件的大小
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="defaultEncoding"> <value>UTF-8</value> </property> <property name="maxUploadSize"> <!-- 上传文件大小限制为31M,31*1024*1024 --> <value>32505856</value> </property> ......</bean>
当上传的文件大小超过限制,可以通过注解@ExceptionHandler( MaxUploadSizeExceededException.class) 进行捕获
/** * 捕获上传文件过大异常 */ @ExceptionHandler( MaxUploadSizeExceededException.class) public void handleException( Exception ex){ // TODO Auto-generated method stub }
然而事实上我们会发现一个问题:
这里设置文件上传最大限制为31M,那么上传一个1G大小的文件必然是没法通过的;但是这只在服务器接收页面传过来的数据超过了31M甚至是完整的1G之后才会抛出异常并被捕获。特别是在网速十分缓慢的时候,往往在文件上传了四五分钟之后才返回大小超出限制的提示,这就给用户带来了非常糟糕的操作体验。
毫无疑问,我们需要提前获取到上限阈值。通过翻看SpringMVC文件上传部分的源码,发现能够通过CommonsMultipartResolver 获取到设置的阈值。这里在进行文件上传操作时先获取限制值的大小,未超过大小才进行上传操作,虽然这多发起了一次请求,但带来了更好的操作体验。
@Autowired private CommonsMultipartResolver cmr; /** * 获取文件设置信息 */ @RequestMapping(value = "/getMaxSize") @ResponseBody public String getMaxSize( HttpServletRequest request) throws Exception { JSONObject json = new JSONObject(); try{ FileUpload fu = cmr.getFileUpload(); long sizeMax = fu.getSizeMax(); // 最大文件大小限制 String encod = fu.getHeaderEncoding(); // 编码 json.put( "encod", encod); json.put( "sizeMax", sizeMax); json.put( "success", true); }catch( Exception ne){ ne.printStackTrace(); json.put( "success", false); } return json.toJSONString(); }
实际中实现上传时,一般会使用 ajaxfileupload.js 通过创建 iframe 来达到异步上传的效果。所以我们需要修改 ajaxfileupload.js 文件的上传方法
ajaxFileUpload: function(s) { // TODO introduce global settings, allowing the client to modify them for all requests, not only timeout s = jQuery.extend({}, jQuery.ajaxSettings, s); /* * 添加上传文件大小限制 * 当上传的文件大小超过限制值,不进行上传 * */ var fileObject = jQuery("#" + s.fileElementId); if( !jQuery( fileObject).inSize()){ s.complete( {}, status = "error"); return; } ......
inSize() 方法的定义
// 判断是否在最大限制之内 jQuery.prototype.inSize = function(){ var obj = this; // 这里通过设定属性data-sizeMax来减少请求的次数 // 只有当属性data-sizeMax不存在时才发起请求获取文件大小的上限值 var sizeMax = obj.attr('data-sizeMax'); if( typeof( sizeMax) == 'undefined'){ jQuery.ajax({ url: $basePath + "/getMaxSize.jc", type:"post", dataType:"json", async : false, success:function( data){ sizeMax = data.sizeMax; obj.attr( 'data-sizeMax', sizeMax); } }); } if( typeof( sizeMax) != 'undefined' && sizeMax > 0){ var fileSize = obj[0].files[0].size; if( typeof( fileSize) != 'undefined'){ // 比较上传文件的大小和上限值 if( fileSize > sizeMax){ var kb = sizeMax / 1024; alert('文件大小不应大于' + kb + 'kb!'); return false; } } } return true; }
0 0
- SpringMVC获取文件上传大小设置
- springMVC获取上传文件
- IIS7 设置文件上传大小
- PHP文件上传大小设置
- php上传大小文件设置
- php 文件上传设置大小
- IIS文件上传大小设置
- 设置上传文件的大小
- JavaScript:客户端获取上传文件的大小
- js获取上传文件的大小
- 设置上传文件的最大大小
- 设置上传文件的最大大小
- 设置上传文件的最大大小
- 设置上传文件的最大大小
- 设置上传文件的最大大小
- 设置ASP.NET 上传文件的大小:
- flex 结合coldfusion 设置文件上传大小
- 上传文件流大小设置多少号?
- css-css3动画翻页,css发光
- 最大子序列和
- 208 Implement Trie (Prefix Tree)
- 代码片段
- Java使用HttpClient发送Get和Post请求
- SpringMVC获取文件上传大小设置
- 关于 Git 你需要知道的一些事情
- Android 高级面试
- 使用ln命令在Linux系统中创建连接文件
- M.2扫盲篇之M.2 PCIE SSD接口定义
- FFmpeg & 流媒体
- ------------解决 svchost 占用过高及磁盘最长活时间过高问题------win---------
- 迪杰斯特拉算法
- JavaScript的一个parseInt易错点