SpringMVC实现文件上传,直接上代码:

后台代码:

01 @RequestMapping(value = "/uploadApk")
02 @ResponseBody
03 public Object uploadApk(
04         @RequestParam(value = "apkFile") MultipartFile apkFile,
05         HttpServletRequest request, HttpServletResponse response) {
06     Map<String,Object> resMap = new HashMap<String,Object>();
07     if (apkFile != null) {
08         //获取保存的路径,
09         String realPath = request.getSession().getServletContext()
10                 .getRealPath("/upload/apk");
11         if (apkFile.isEmpty()) {
12             // 未选择文件
13             resMap.put("status", StatusConstants.STATUS_PARM_IS_EMPTY);
14         } else{
15             // 文件原名称
16             String originFileName = apkFile.getOriginalFilename();
17             try {
18                 //这里使用Apache的FileUtils方法来进行保存
19                 FileUtils.copyInputStreamToFile(apkFile.getInputStream(),
20                         new File(realPath, originFileName));
21                 resMap.put("status",StatusConstants.STATUS_OK);
22             } catch (IOException e) {
23                 System.out.println("文件上传失败");
24                 resMap.put("status", StatusConstants.STATUS_EXECPTION);
25                 e.printStackTrace();
26             }
27         }
28  
29     }
30     return resMap;
31 }

Spring配置文件中需要添加如下内容:

01 <!-- SpringMVC上传文件时,需配置MultipartResolver处理器 -->
02 <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
03     <!-- 指定所上传文件的总大小不能超过80M......注意maxUploadSize属性的限制不是针对单个文件,而是所有文件的容量之和 -->
04     <property name="maxUploadSize" value="80000000"/>
05 </bean>
06   
07 <!-- SpringMVC在超出上传文件限制时,会抛出org.springframework.web.multipart.MaxUploadSizeExceededException -->
08 <!-- 该异常是SpringMVC在检查上传的文件信息时抛出来的,而且此时还没有进入到Controller方法中 -->
09 <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
10     <property name="exceptionMappings">
11         <props>
12             <!-- 遇到MaxUploadSizeExceededException异常时,自动跳转到/WEB-INF/jsp/error_fileupload.jsp页面 -->
13             <prop key="org.springframework.web.multipart.MaxUploadSizeExceededException">error_fileupload</prop>
14         </props>
15     </property>
16 </bean>

jsp页面内容(这里结合的EasyUi的一些内容):

01 function ajaxFileUpload(){
02     //获取软件更新详情
03     var apkIntroduce = $("#apkInfo").val();
04     //开始上传文件时显示一个图片,文件上传完成将图片隐藏
05     //$("#loading").ajaxStart(function(){$(this).show();}).ajaxComplete(function(){$(this).hide();});
06     //执行上传文件操作的函数,使用encodeURI方法,防止传输中文字符的时候出现乱码
07     var uploadUrl = encodeURI(encodeURI(basePath + "uploadApk.do?apkIntroduce="+apkIntroduce));
08     $.ajaxFileUpload({
09         //处理文件上传操作的服务器端地址(可以传参数,已亲测可用)
10         url:uploadUrl,
11 //      url:basePath + "uploadApk.do?apkIntroduce="+apkIntroduce,
12         secureuri:false,                       //是否启用安全提交,默认为false
13         fileElementId:'apkFile',           //文件选择框的id属性
14         dataType:'text',                       //服务器返回的格式,可以是json或xml等
15         success:function(data, status){        //服务器响应成功时的处理函数
16             data = data.replace("<PRE>", '');  //ajaxFileUpload会对服务器响应回来的text内容加上<pre>text</pre>前后缀
17             data = data.replace("</PRE>", '');
18             data = data.replace("<pre>", '');
19             data = data.replace("</pre>", ''); //本例中设定上传文件完毕后,服务端会返回给前台[0`filepath]
20              
21             //将String字符串转换成json
22             var dataset = $.parseJSON(data);
23             if(dataset.status == "ok"){
24                 $('#result').html("Apk上传成功
25 ");
26                 $.messager.alert("提示","上传成功");
27                  
28                 //关闭添加窗口
29                 addApkWindow.window('close');
30                 //刷新页面
31                 datagrid.datagrid('reload');
32                  
33             }else if ( dataset.status == "parm_is_empty"){
34                 $('#result').html("没有选择APK!");
35             }else {
36                 $('#result').html('Apk上传失败,请重试!!');
37             }
38         },
39         error:function(data, status, e){ //服务器响应失败时的处理函数
40             console.log(e);
41             console.log(data);
42             $('#result').html('APK上传失败,请重试!!');
43         }
44     });
45 }

Html页面代码:

01     <div id="addApkWindows">
02      
04         <div id="result"></div>
05 <!--         <img id="uploadImage" src="http://www.firefox.com.cn/favicon.ico"> -->
06         软件更新详情:
07  
08         <textarea rows="2" cols="30" id="apkInfo"></textarea>
09          
10 上传文件:
11  
12         <input type="file" id="apkFile" name="apkFile"/>
13  
14         <input type="button" value="上传" onclick="ajaxFileUpload()"/>
15  
16     </div>

上面的JSP代码中,使用到了JS中的encodeURI方法,这个的目的是为了防止在传递中文参数时的乱码问题,当然,如果只传文件的话,则没有必要使用encodeURI

SpringMVC实现ajax文件上传的更多相关文章

  1. springmvc+ajax文件上传

    环境:JDK6以上,这里我是用JDK8,mysql57,maven项目 框架环境:spring+springmvc+mybaits或spring+springmvc+mybatis plus 前端代码 ...

  2. 使用ajax提交form表单,包括ajax文件上传 转http://www.cnblogs.com/zhuxiaojie/p/4783939.html

    使用ajax提交form表单,包括ajax文件上传 前言 使用ajax请求数据,很多人都会,比如说: $.post(path,{data:data},function(data){ ... },&qu ...

  3. AJAX文件上传实践与分析,带HTML5文件上传API。

    对于HTML5已经支持AJAX文件上传了,但如果需要兼容的话还是得用一点小技巧的,HTML5等等介绍,先来看看以前我们是怎么写的. 网上可能会有一些叫AJAX文件上传插件,但在AJAX2.0之前是不可 ...

  4. 兼容ie的jquery ajax文件上传

    Ajax文件上传插件很多,但兼容性各不一样,许多是对ie不兼容的,另外项目中是要求将网页内容嵌入到桌面端应用的,这样就不允许带flash的上传插件了,如:jquery uploadify...悲剧 对 ...

  5. jQuery插件AjaxFileUpload实现ajax文件上传

    转自:http://www.cnblogs.com/linjiqin/p/3530848.html jQuery插件AjaxFileUpload用来实现ajax文件上传,该插件使用非常简单,接下来写个 ...

  6. ajax 文件上传,ajax

    ajax 文件上传,ajax 啥也不说了,直接上代码! <input type="file" id="file" name="myfile&qu ...

  7. 转: 如何实现jQuery的Ajax文件上传

    [PHP文件上传] 在开始之前,我觉得是有必要把通WEB上传文件的原理简单说一下的.实际上,在这里不管是PHP,JSP,还是ASP处理上传的文件,其实都是WEB早已把文件上传到服务器了,我们只是运用上 ...

  8. [代码示例]用Fine Uploader+ASP.NET MVC实现ajax文件上传

    原文 [代码示例]用Fine Uploader+ASP.NET MVC实现ajax文件上传 Fine Uploader(http://fineuploader.com/)是一个实现 ajax 上传文件 ...

  9. php+ajax文件上传

    php+ajax文件上传 html: <input id="user_real_name" class="input_show" type="t ...

随机推荐

  1. P2136 拉近距离(spfa判负环)

    洛谷—— P2136 拉近距离 题目背景 我是源点,你是终点.我们之间有负权环. ——小明 题目描述 在小明和小红的生活中,有N个关键的节点.有M个事件,记为一个三元组(Si,Ti,Wi),表示从节点 ...

  2. noip2009提高组解题报告

    NOIP2009潜伏者 题目描述 R 国和S 国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动. 历尽艰险后,潜伏于 S 国的R 国间谍小C 终于摸清了S 国军用密码的编码规则: 1. S 国 ...

  3. 计算机操作系统处理机调度读后感—–关于进程概念的剖析。从RING3到RING0(32位操作系统)

    计算机操作系统处理机调度读后感: 笔者在看操作系统西安电子科技大学那本书的时候,初次感觉本科教的不会太难,所以没有认真的看,但是随后这本书讲的刷新了我的世界观.这本书居然是ring0级别的,这时不禁吐 ...

  4. 解决maven无法下载依赖的jar包的问题

    背景: 公司内部有搭建maven私服,自己做了个核心jar包,一开始是xxx-core.1.0.0.SNAPSHOT版本,是本地和项目环境都可以正常使用的.为支持上线,发布稳定版本,xxx-core. ...

  5. 解决Eclipse中SVN版本信息不显示的问题

    eclipse  中使用 svn 插件,原本正常,未作任何更改,最近几天突然eclipse 中查看文件时,文件后面的 版本号 . 文件的状态图标 等等都不见了.以为有插件冲突,卸载了好多其他的相关的插 ...

  6. centos 複製時顯示進度的指令 pv

    Pipe Viewer 的简称pv:意思是通过管道显示数据处理进度的信息.这些信息包括已经耗费的时间,完成的百分比(通过进度条显示),当前的速度,全部传输的数据,以及估计剩余的时间. yum inst ...

  7. indexOf 和 lastIndexOf 的区别

    indexOf 和 lastIndexOf 是什么? indexOf 和 lastIndexOf 都是索引文件 indexOf 是查某个指定的字符串在字符串首次出现的位置(索引值) (也就是从前往后查 ...

  8. UVA 1356 - Bridge(自适应辛普森)

    UVA 1356 - Bridge option=com_onlinejudge&Itemid=8&page=show_problem&category=493&pro ...

  9. c程序设计语言第一章1

    1,c程序都是由函数和变量组成的. 练习1.6验证布尔表达式getchar()!= EOF的取值是0还是1 答: #include <stdio.h> #include <stdli ...

  10. DirectX11 学习笔记5 - D3DXMath 库

    directx11 特别推出了一个数学库 用于向量 矩阵的计算.并且使用128位 同一时候计算4条32位数据 (SIMD) 之前基本是用的directx10math.h这个头文件.  这个数学库既然是 ...