标签:
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
标签:
原文地址:http://www.cnblogs.com/shangxiaofei/p/5369789.html