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表单的形式提交

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值