欲实现的功能目标:当点击下图的导出数据文件时弹出文件下载框,默认csv格式,用户自定义下载的本地路径
遇到的问题:
1.项目之前做过一次下载,但是是使用了本地文件模板。用输入流读取文件模板,插入数据,以输出流输出,弹出下载框下载。而这次的情况是不能在后台指定本地文件路径,也就是无法读取模板文件,直接将数据库查询出的数据写成指定格式并供用户选择地址下载。省去输入流读取本地文件一环。
2.下载框始终无法弹出,而是直接在页面显示数据。
解决:
1.
1 /** 2 * 导出CSV数据 3 * @return 数据 4 */ 5 @RequestMapping(value = "dataExport",method = RequestMethod.POST) 6 public void dataExport(HttpServletResponse response) throws Exception{ 7 8 //查询出需要打印的数据 9 Listlist=sc182211Logic.findDataExport();10 11 //设置下载弹出框12 response.setContentType("application/csv;charset=gbk");13 response.setHeader("Content-Disposition","attachment;filename="+URLEncoder.encode("打印标签.csv", "UTF-8"));15 16 //新建打印输出对象17 PrintWriter out = response.getWriter();18 19 out.write("任务编码,操作码,阅读码,品牌名, 等级名"+"\n");20 for(DsPrintTask s:list){21 out.write(s.getPrintTaskId()+","+s.getOperateBar()+","+s.getReadBar()+","+s.getBrandName()+","+s.getGradeName()+"\n");22 }
2.下载框不弹出,文件内容在网页直接显示的原因是请求方式有问题。下面代码中的
$("#main-content").postUrl(Main.contextPath + "/SC182211/dataExport");是用的公司框架里自己封装的JS方法,使用这个会造成下载框不弹出的问题。于是使用后面的form表单提交方法
1 $("#SC182211_EXPORT").click(function(){ 2 // $("#main-content").postUrl(Main.contextPath + "/SC182211/dataExport"); 3 4 var form = $("