ajax流文件无法下载

由于jQuery的Ajax函数不支持流类型,因此在处理流文件下载时,需要采用构建表单的方式进行。这种方式可以绕过dataType限制,实现文件的ajax下载。服务端需要配合特定的代码来支持这种下载方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于jQuery的ajax函数、及ajaxSubmit等函数的返回类型(dataType)只有xml、text、json、html等类型,没有“流”类型,故我们要实现ajax下载时,不能够使用相应的ajax函数进行文件下载。

于是只能使用构建表单的方式进行下载

 $('#js-export').click(function () {

        var allTableData = $('#mytab').bootstrapTable('getData');
        var form = $("<form>");
        form.attr('style', 'display:none');
        form.attr('target', '');
        form.attr('method', 'post');
        form.attr('action', 'export_statistics');
        var input1 = $('<input>');
        input1.attr('type', 'hidden');
        input1.attr('name', 'jsonParam');
        input1.attr('value', JSON.stringify(allTableData));
        $('body').append(form);
        form.append(input1);

        form.submit();
        form.remove();
  
    });

对应服务端代码为:

 @PostMapping(value = "/export_statistics")
    @ResponseBody
    public void export_statistics(@RequestBody String jsonParam, HttpServletRequest request, HttpServletResponse response) throws Exception {
        String fileName = System.currentTimeMillis() + "仪器统计表.xls";
        Type type = new TypeToken<List<InstrumentTime>>() {}.getType();
        List<InstrumentTime> instrumentTimeList = new Gson().fromJson(String.valueOf(jsonParam), type);
        String[][] content = new String[instrumentTimeList.size()][];
        for (int i = 0; i < instrumentTimeList.size(); i++) {
            content[i] = new String[5];
            InstrumentTime instrumentTime = instrumentTimeList.get(i);
            content[i][0] = instrumentTime.getInstrumentName();
            content[i][1] = instrumentTime.getConventionYemo();
            content[i][2] = instrumentTime.getCount();
            content[i][3] = instrumentTime.getInstrumentPerson();
            System.out.println("content--->"+content[i][0]);
        }

        //创建HSSFWorkbook
        HSSFWorkbook hf = InstrumentStatisticsExcelUtil.getHSSFWorkbook(content, null);

        //响应到客户端
        try {
            this.setResponseHeader(response, fileName);
            OutputStream os = response.getOutputStream();
            hf.write(os);
            os.flush();
            os.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值