加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 设置byte []作为文件下载

发布时间:2020-12-15 02:35:15 所属栏目:Java 来源:网络整理
导读:我有一个生成Excel文件并输出为byte []的Jasper报告,我希望该文件在浏览器中显示为下载,但此刻它只是将原始代码打印到浏览器. 代码的相关部分如下所示,这是从AJAX请求启动的(页面已经加载): JasperReport jasperReport; JasperPrint jasperPrint; HttpServl
我有一个生成Excel文件并输出为byte []的Jasper报告,我希望该文件在浏览器中显示为下载,但此刻它只是将原始代码打印到浏览器.

代码的相关部分如下所示,这是从AJAX请求启动的(页面已经加载):

JasperReport jasperReport;
    JasperPrint jasperPrint;
    HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();    

    byte[] excel = null;
    FacesContext facesContext = FacesContext.getCurrentInstance();

    try {
        ArrayList<SwimDataReport> dataList = getData();
        if(dataList!=null){
            JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(dataList,false);

            jasperReport = JasperCompileManager.compileReport(reportFile.getPath());
            jasperPrint = JasperFillManager.fillReport(jasperReport,parameters,dataSource);
            JRXlsExporter exporter = new JRXlsExporter();
            ByteArrayOutputStream  xlsReport = new ByteArrayOutputStream();
            exporter.setParameter(JRExporterParameter.JASPER_PRINT,jasperPrint);
            exporter.setParameter(JRExporterParameter.OUTPUT_STREAM,xlsReport);            
            exporter.exportReport();
            excel = xlsReport.toByteArray();

            response.reset();
            response.setContentType("application/vnd.ms-excel");
            response.setHeader("Content-disposition","attachment; filename="Export.xls"");

            xlsReport.close();

            OutputStream  ouputStream = response.getOutputStream();
            ouputStream.write(excel);
            ouputStream.close();

            facesContext.responseComplete();
            this.cleanUp();
        }else{
            return;
        }
    } catch (JRException e) {       
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    }

我出错的任何想法?

解决方法

看来您无法从AJAX请求下载文件,因此我使用了h:commandButton来触发下载.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读