欲實現的功能目標:當點擊下圖的導出數據文件時彈出文件下載框,默認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 List<DsPrintTask> list=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 = $("<form>"); //定義一個form表單 5 form.attr('style', 'display:none'); //在form表單中添加查詢參數 6 form.attr('target', ''); 7 form.attr('method', 'post'); 8 form.attr('action', "/msk-web/SC182211/dataExport"); 9 10 var input1 = $('<input>'); 11 input1.attr('type', 'hidden'); 12 input1.attr('name', 'strUrl');14 $('body').append(form); //將表單放置在web中 15 form.append(input1); //將查詢參數控件提交到表單上 16 form.submit(); 19 });