我正在尝试使用Spring MVC和AngularJS以 Zip 格式从本地计算机下载JasperReports报告。我从 JSF 代码中得到启发,并试图在Spring中复制它。但是正在返回,这就是代码爆炸的地方。我想要一些帮助,也许可以替代这个或其他一些我会非常感激的建议。FacesContext.getCurrentInstance()
null
FacesContext
我的服务处理程序:
public SubmissionReportDto excelDownload(Map<String, String> contractData) throws IOException {
String contractId = contractData.get(DBConstants.PROC_PI_CONTRACT_ID);
String versionNo = contractData.get(DBConstants.VERSION_NO);
ZipOutputStream zos = null;
String zipFileName = "";
String fileName = "";
submissionReportJasperDao = new SubmissionReportJasperDaoImpl();
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
HttpServletResponse response = (HttpServletResponse) externalContext.getResponse();
try {
BufferedInputStream input = null;
BufferedOutputStream output = null;
submissionReportDto.setReportName("Billing Related Parameters.jasper");
String reportName = submissionReportDto.getReportName();
byte[] buffer = submissionReportJasperDao.mainReportXLS(contractId, versionNo, reportName);
response.reset();
response.setHeader("Content-disposition", "attachment; filename=" + zipFileName);
response.setHeader("Pragma", "public");
response.setDateHeader("Expires", 0);
response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
response.setHeader("Cache-Control", "public");
response.setHeader("Content-Description", "File Transfer");
response.setContentType("application/xls");
response.setContentType("application/zip");
try {
zos = new ZipOutputStream(response.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
}
zos.setMethod(ZipOutputStream.DEFLATED);
zos.setLevel(Deflater.BEST_COMPRESSION);
ZipEntry entry = new ZipEntry(fileName);
try {
zos.putNextEntry(entry);
zos.write(buffer);
zos.write(buffer);
} catch (IOException e) {
e.printStackTrace();
}
} catch (Exception e) {
System.out.print("Exception" + e);
} finally {
if (null != zos) {
zos.flush();
zos.closeEntry();
zos.close();
}
}
facesContext.responseComplete();
submissionReportDto.setSuccessMessage("Download Success");
return submissionReportDto;
}