本文共 3793 字,大约阅读时间需要 12 分钟。
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 | |
03 | <!-- --> |
04 | < div id = "result" ></ div > |
05 | <!-- <img id="uploadImage" src=""> --> |
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
转载地址:http://mtqya.baihongyu.com/