前提條件
注意:bean的id名不能改變
<!-- 上傳文件攔截,設置最大上傳文件大小 10M=10*1024*1024(B)=10485760 bytes -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="10485760" />
<!--<property name="resolveLazily" value="true"/>-->
</bean>
前台頁面upload.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta charset="UTF-8">
<title>Document</title>
<script src="${pageContext.request.contextPath }/static/jquery/jquery-1.9.1.min.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath }/static/jquery/jquery.form.js"></script>
<script type="text/javascript">
//這種方式,可以異步請求數據,但是不能異步上傳文件
/*使用這種方式,會在后台拋出一個異常:
org.springframework.web.multipart.MultipartException:
The current request is not a multipart request
*/
function doUpload(){
$.ajax({
url : "getParamFromFile",
type : "POST",
data : $('#postForm').serialize(),
success : function(data) {
$( '#messageTip').html(data);
$( '#messageTip').show();
},
error : function(data) {
$( '#messageTip').html(data);
$( '#messageTip').show();
}
});
}
//使用jquery.form.js的表單插件來提交表單,這個可以異步上傳文件
/* function doUpload(){
var options = {
url: 'getParamFromFileForAjax',//表單提交的地址。缺省值: 表單的action的值
type: 'POST',
dataType:'text',
data :{
fileName : 'uploadFile'
},
//clearForm: true,//成功提交后,清除所有表單元素的值
//timeout: 3000 ,//限制請求的時間,當請求大於3秒后,跳出請求
// 從服務傳過來的數據顯示在這個div內部也就是ajax局部刷新
//target: '#output1',
// 處理之后的處理
success: function(data){
alert(data);
var result = $.parseJSON(data);
alert(result);
}
};
//使用jquery的ajax upload插件可以上傳文件
$('#postForm').ajaxSubmit(options);
} */
</script>
</head>
<body>
<form id="postForm" action="getParamFromFile" method="post"
enctype="multipart/form-data">
上傳XML模版文件:<input type="file" name="uploadFile"/>
<input type="submit" value="上傳"/>
<input type="button" value="獲取Json參數數據" onclick="doUpload()"/>
<span id="messageTip" hidden="true"></span>
</form>
</body>
</html>
后台Controller代碼
//這種是使用傳統的form表單提交的,即在前台頁面上點擊‘上傳’按鈕上傳文件的形式,
//而且在form標簽上必須指定enctype="multipart/form-data"
@RequestMapping(value = "getParamFromFile",method = RequestMethod.POST) @ResponseBody public Map<String, Object> getParamFromFile(@RequestParam("uploadFile") MultipartFile uploadFile,HttpServletRequest request, HttpServletResponse response) { Map<String, Object> paramMap = new LinkedHashMap<String, Object>(); FileInputStream inputStream = null; try{ String filename = uploadFile.getName(); String originalFilename = uploadFile.getOriginalFilename(); System.out.println("FileName = " + filename); System.out.println("originalFilename = " + originalFilename); inputStream = (FileInputStream) uploadFile.getInputStream(); } catch (IOException e1) { paramMap.put("message", "上傳文件錯誤"); return paramMap; } //String filePath = "E:\\work\\svn\\openeap\\code\\openeap\\src\\main\\webapp\\template\\北京市房屋租賃合同5.xml"; //paramMap = ImportFile.getParamFromFile(filePath); paramMap = ImportFile.getParamFromStream(inputStream); Iterator it = paramMap.entrySet().iterator(); while (it.hasNext()) { Map.Entry e = (Map.Entry) it.next(); System.out.println("參數 Key: " + e.getKey() + "; 參數 Value: " + e.getValue()); } System.out.println("生成的json為: " + JsonMapper.getInstance().toJson(paramMap)); return paramMap; } //jQuery form插件的使用 后台 @RequestMapping(value = "getParamFromFileForAjax",method = RequestMethod.POST) @ResponseBody public Map<String, Object> getParamFromFileForAjax(HttpServletRequest request,String fileName) { Map<String, Object> paramMap = new LinkedHashMap<String, Object>(); FileInputStream inputStream = null; //把Request強轉成多部件請求對象 MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest) request; //根據文件名稱獲取文件對象 CommonsMultipartFile commonsMultipartFile = (CommonsMultipartFile) multipartHttpServletRequest.getFile(fileName); try{ String filename = commonsMultipartFile.getName(); String originalFilename = commonsMultipartFile.getOriginalFilename(); System.out.println("FileName = " + filename); System.out.println("originalFilename = " + originalFilename); inputStream = (FileInputStream) commonsMultipartFile.getInputStream(); } catch (IOException e1) { paramMap.put("message", "上傳文件錯誤"); return paramMap; } //String filePath = "E:\\work\\svn\\openeap\\code\\openeap\\src\\main\\webapp\\template\\北京市房屋租賃合同5.xml"; //paramMap = ImportFile.getParamFromFile(filePath); paramMap = ImportFile.getParamFromStream(inputStream); Iterator it = paramMap.entrySet().iterator(); while (it.hasNext()) { Map.Entry e = (Map.Entry) it.next(); System.out.println("參數 Key: " + e.getKey() + "; 參數 Value: " + e.getValue()); } System.out.println("生成的json為: " + JsonMapper.getInstance().toJson(paramMap)); return paramMap; }
異步上傳文件有兩種方式:
參考的文章:
http://www.cnblogs.com/zhuxiaojie/p/4783939.html#autoid-1-0-0
