近期在学习springMVC与easyui的过程中遇到的文件下载问题。在springMVC中下载文件,如下载图片、导出数据报表时。如果使用ajax发送请求,不能直接解析获取response.getOutputStream()中的数据。
后台Controller代码:
@RequestMapping("/export")
public void exportUser(HttpServletResponse response,@RequestParam("ids") List<Integer> ids){
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String formatDate = format.format(new Date());
response.setHeader("content-disposition", "attachment;filename="+formatDate+".xls");
if(ids.size()==0){
ids=null;
}
List<User> list = userService.queryByPageAndIds(null, null, ids).getRows();
try {
userService.exportUsers(response.getOutputStream(), list, User.class);
} catch (IOException e) {
e.printStackTrace();
}
}
由于前台直接使用ajax请求Controller无法正确获得结果,所以想到了使用JS中window对象的location.href方法请求Controller
前台easyui中代码
//初始化导出按钮
$("#userDatagridExportBtn").linkbutton({
text:"数据导出",
onClick:function(){
//获取数据表格中选中的数据
var arr=$("#userDatagrid").datagrid("getSelections");
var ids=[];
for(var i=0;i<arr.length;i++){
ids[i]=arr[i].id;
}
//$.get("${pageContext.request.contextPath}/user/export.do","ids="+ids);
location.href="${pageContext.request.contextPath}/user/export.do?ids="+ids;
$("#userDatagrid").datagrid("reload");
}
});
由于Controller中使用了response的outPutStream作为响应方式,所有使用location.href发起请求时也不是刷新页面,文件也能正常下载。