步骤:
一、导出js按钮事件
$("#logDownload").click(function(e){
e.preventDefault();
window.location.href = "downloadInfoList?beginTime="+beginTime+"&endTime="+endTime+
"&returnCompany="+returnCompany+
"&title="+title;
});
注:logDownLoad为按钮的id,downloadInfoList为srpingmvc中controller中相应的方法
二、controller层方法
@RequestMapping(value = "/downloadnfoList", method = { RequestMethod.GET })
public void downloadInfoList(HttpSession session,
HttpServletRequest request, HttpServletResponse response,
@RequestParam String beginTime, @RequestParam String endTime,
@RequestParam String returnCompany,
@RequestParam String title) {
// companyId为登陆后放到session域中的值
int companyId = Integer.parseInt(session.getAttribute("companyId").toString());
// 获取/temp/的绝对路径
String tomcatPath = request.getServletContext().getRealPath(
"/temp/");
Date d = new Date();
//给要导出的csv文件命名
File file = new File(tomcatPath + "/" + d.getTime() + ".csv");
try {
Date begin = null;
Date end = null;
if (beginTime == null || beginTime == "") {
end = DateUtils.parse("2016-01-01 00:00:00");
} else {
begin = DateUtils.parse(beginTime + " 00:00:00");
}
if (endTime == null || endTime == "") {
end = new Date();
} else {
end = DateUtils.parse(endTime + " 23:59:59");
}
// 生成csv文件
//调用service方法生成相应的文件
infoService.saveInfoCsv(file, begin, end, returnCompany, title, companyId, session
.getAttribute("qrtraceName").toString());
response.addHeader("Content-Disposition", "attachment;filename="
+ d.getTime() + ".csv");
response.addHeader("Content-Length", "" + file.length());
response.setContentType("application/csv;charset=utf-8");
InputStream fis = new BufferedInputStream(new FileInputStream(file));
OutputStream fos = new BufferedOutputStream(
response.getOutputStream());
byte[] buffer = new byte[1024];
while (fis.read(buffer) != -1) {
fos.write(buffer);
buffer = new byte[1024];
}
fos.flush();
fis.close();
fos.close();
if (file.exists()) {
file.delete();
}
} catch (Exception e) {
e.printStackTrace();
if (file.exists()) {
file.delete();
}
}
}
三、service方法
接口:void saveInfoCsv(File file, Date beginTime, Date endTime, String returnCompany,
String title, int companyId, String actor);
接口实现:
@Override
public void saveInfoCsv(File file,Date beginTime, Date endTime, String returnCompany,
String title, int companyId, String actor){
sysManageService.addLog(actor, "导出退货信息", new Date(), companyId);
FileOutputStream out = null;
String sep = ",";
try {
out = new FileOutputStream(file);
OutputStreamWriter writer = new OutputStreamWriter(out,"gbk");
writer.write("图书名称");
writer.write(sep);
writer.write("退货商");
writer.write(sep);
writer.write("退货时间");
writer.write(sep);
writer.write("退货数量");
writer.write(sep);
//换行
writer.write(System.getProperty("line.separator"));
//根据条件获取要导出的数据
List<InfoDTO> list = infoDao.getListInfoByConditions(beginTime, endTime, title, returnCompany, companyId);
for(InfoDTO dto : list){
writer.write("\"\t"+dto.getTitle().replaceAll("\"", "\"\"")+"\"");
writer.write(sep);
writer.write("\"\t"+dto.getReturnCompany().replaceAll("\"", "\"\"")+"\"");
writer.write(sep);
if(dto.getReturnDate()!=null ){
writer.write("\t"+dto.getReturnDate().toString());
}else{
writer.write("");
}
writer.write(sep);
writer.write("\"\t"+dto.getReturnMount().toString()+"\"");
//writer.write(sep);
//每循环完一次则换行一次
writer.write(System.getProperty("line.separator"));
}
writer.flush();
writer.close();
}catch(Exception e){
e.printStackTrace();
}
}