response.outpustream無法保存文件

背景:想要根據一些數據,導出一個excel表並通過瀏覽器保存到本地。

前端jsp代碼:

form.submit();  
		 $.ajax({
			type: 'post',
			data:params,
			url: 'exportSummaryReport',
			success: function(data) {
			},
			error: function(data) {
				alert("數據導出失敗,請聯繫管理員");
			}
		});   

後臺controller代碼:

   @RequestMapping(value = "/exportSummaryReport",method = RequestMethod.POST,produces = "text/plain;charset=utf-8")
    @ResponseBody
    public void exportSummaryReport(HttpServletRequest request,
            HttpServletResponse response,
            @RequestParam("*****") String ******NO,
            @RequestParam("*****") String *****NO ) {
               *********
            ExcelUtil.exportSummaryReport(dtoList, changedDtoList, response);
    }

工具類(ExcelUtil..exportSummaryReport)中代碼:

response.setContentType("application/vnd.ms-excel");
            response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode("test", "UTF-8")+".xls");
            response.setHeader("Pragma", "No-cache");
            OutputStream outputStream  = response.getOutputStream();
            workbook.write(outputStream);
            workbook.close();
            outputStream.flush();
            outputStream.close();

但系統運行時,無報錯也無法生成文件。最後查詢時發現ajax無法傳輸二進制,也就是不能涉及流(具體怎麼描述我也不確定),所以在提交導出文件的請求時,不能用ajax提交申請。於是就改成了

<form id="exportForm" class="sel_btn" action="exportSummaryReport" method="post" style="display: none">
    <input type="text" class="col-sm-2" name="****rNO" id="****" > 
    <input type="text" class="col-sm-2" name="****NO" id="****" >
</form>

var form=$("#exportForm");
		form.submit(); 

改用form表單提交的方式提交請求,表單可以一開始就寫好在頁面,但是隱藏起來,也可以在提交按鈕的功能模塊裏面動態生成一個form

var form=$("<form>");//定義一個form表單
			form.attr("style","display:none");
			form.attr("target","");
			form.attr("action","exportInvoiceExcel");
			$("body").append(form);
			form.submit();

總結:ajax無法使用文件流,所以提交申請時採用form表單的形式提交

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章