前提条件
注意: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参数数据" οnclick="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