Java 将字节[]设置为下载为文件
我有一个Jasper报告,它生成一个Excel文件并以字节[]的形式输出,我希望该文件在浏览器中显示为下载,但目前它只是将原始代码打印到浏览器中 代码的相关部分如下所示,这是从AJAX请求启动的(页面已经加载):Java 将字节[]设置为下载为文件,java,http-headers,jasper-reports,bytearray,seam,Java,Http Headers,Jasper Reports,Bytearray,Seam,我有一个Jasper报告,它生成一个Excel文件并以字节[]的形式输出,我希望该文件在浏览器中显示为下载,但目前它只是将原始代码打印到浏览器中 代码的相关部分如下所示,这是从AJAX请求启动的(页面已经加载): JasperReport-JasperReport; 茉莉花; HttpServletResponse=(HttpServletResponse)context.getExternalContext().getResponse(); 字节[]excel=null; FacesConte
JasperReport-JasperReport;
茉莉花;
HttpServletResponse=(HttpServletResponse)context.getExternalContext().getResponse();
字节[]excel=null;
FacesContext FacesContext=FacesContext.getCurrentInstance();
试一试{
ArrayList dataList=getData();
如果(数据列表!=null){
JRBeanCollectionDataSource=新的JRBeanCollectionDataSource(数据列表,false);
jasperReport=jasprocmpilemanager.compileReport(reportFile.getPath());
jasperPrint=JasperFillManager.fillReport(jasperReport,参数,数据源);
JRXlsExporter=新的JRXlsExporter();
ByteArrayOutputStream xlsReport=新建ByteArrayOutputStream();
exporter.setParameter(jreporterParameter.JASPER_PRINT,jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_流,xlsReport);
出口商。出口报告();
excel=xlsReport.toByteArray();
response.reset();
response.setContentType(“application/vnd.ms excel”);
setHeader(“内容处置”、“附件;文件名=\”Export.xls\”);
xlsReport.close();
OutputStream=response.getOutputStream();
outstream.write(excel);
uputstream.close();
facesContext.responseComplete();
这个.cleanUp();
}否则{
返回;
}
}捕获(JRE){
e、 printStackTrace();
}捕获(例外e){
e、 printStackTrace();
}
你知道我哪里出错了吗?我的工作代码类似于这个,上面有一个大写的D i、 e.:
内容处置
而不是内容处置
这也是强制执行的方式。您似乎无法从AJAX请求下载文件,因此我使用了h:commandButton来触发下载。尝试使用
a4j:htmlCommandLink
触发下载请求,并在标记中给出target=“\u NEW”
Excel文件的内容类型为:
对于BIFF.xls文件:应用程序/vnd.ms excel
对于Excel2007和更高版本的.xlsx文件:application/vnd.openxmlformats of icedocument.spreadsheetml.sheet
代替:
“内容处置”、“附件;文件名=\”导出.xls\“”
尝试使用:
“内容配置”、“附件;文件名=Export.xls谢谢你的建议Stefano,我试过了,但它仍然只是在网页中显示原始代码
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();
}