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提交申请。于是就改成了



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

改用form表单提交的方式提交请求,表单可以一开始就写好在页面,但是隐藏起来,也可以在提交按钮的功能模块里面动态生成一个form

var form=$("
");//定义一个form表单 form.attr("style","display:none"); form.attr("target",""); form.attr("action","exportInvoiceExcel"); $("body").append(form); form.submit();

总结:ajax无法使用文件流,所以提交申请时采用form表单的形式提交

 

你可能感兴趣的:(response.outpustream无法保存文件)