2012-06-29 53 views
3

我有一个生成Excel文件并以字节[]形式输出的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(); 
    } 

任何想法,我要去的地方错了吗?与此类似

回答

1

看来您无法从AJAX请求下载文件,所以我使用h:commandButton来触发下载。

0

我的工作代码中有一个大写字母D.

即:Content-Disposition代替Content-disposition

这也是如何RFC2183的任务。

+0

感谢您的建议Stefano,我试过了,但它仍然只是在网页上显示原始代码 – DaveB

0

尝试使用a4j:htmlCommandLink来触发下载请求并在标记中给出target="_NEW"

0

为Excel文件内容类型是:

为BIFF .xls文件:应用/ vnd.ms-的excel

为Excel2007中和上述的.xlsx文件:应用/ VND。 openxmlformats-officedocument.spreadsheetml.sheet

insted的的: “内容处置”,“附件;文件名= \“Export.xls \”

尝试使用: ”Content-disposition“,”attachment;文件名= Export.xls