ajax 获取文件流 的另类解决办法

6 篇文章 0 订阅
5 篇文章 0 订阅

尝试了下$.ajax或者$.post等方式去后台获取文件流到response推到前台时总是失败的。

想到了另外一种方式,采用隐藏form提交的方式,再用response来推就可以。

js:

function export1() {
            var form = $("<form>");
            form.attr('style', 'display:none');
            form.attr('target', '');
            form.attr('method', 'post');
            form.attr('action', '${pageContext.request.contextPath}/edocinfo/export');

            var input1 = $('<input>');
            input1.attr('type', 'hidden');
            input1.attr('name', 'item');
            input1.attr('value', JSON.stringify($.serializeObject($('#searchForm'))));

            $('body').append(form);
            form.append(input1);
            
            form.submit();
            form.remove();

 }

然后后台采用老办法,往response里写文件流,往前台推。

我附带贴上代码:

@RequestMapping("/export")
    @ResponseBody
    public void exportXLS(@RequestParam("item")String item, HttpServletResponse response) {
        try {
            String workbookName = "单证宝无纸化电子提单数据统计"
                    + DateUtil.formatDate(new Date(), "yyyyMMdd") + ".xls";
            
            //专治中文乱码
            String fileName = new String(workbookName.getBytes("gb2312"), "ISO8859-1" );
            
            item = item.replace("&quot;", "\"");
            logger.info(item);

            //查询条件封装
            Edocinfo info = JSON.parseObject(item, Edocinfo.class);


            //封装excel
            byte[] data = edocinfoService.exportXLS(info);
            
            // 放到response中推到前台
            response.setContentType("application/x-download");
            response.addHeader("Content-Disposition","attachment;filename=" + fileName);
            ServletOutputStream out = response.getOutputStream();
            InputStream fileStream = new ByteArrayInputStream(data);
            IOUtils.copy(fileStream, out);
            out.flush();
            out.close();
        }catch(Exception e){
            e.printStackTrace();
        }
    }


  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值