gpt4 book ai didi

java - 需要一种在服务层实例化 ZipOutputStream 对象的方法

转载 作者:太空宇宙 更新时间:2023-11-04 08:11:36 29 4
gpt4 key购买 nike

我的 bean 类中有以下代码块 -

HttpServletResponse response = (HttpServletResponse) getFacesContext().getExternalContext().getResponse();
ZipOutputStream zos = new ZipOutputStream(response.getOutputStream());

从我的 bean 中,我调用服务层,服务层又调用数据库层,检索数据并将生成的文件写入服务层的 ZIP 文件中。我遇到一个问题,如果没有生成文件,我不知道该怎么办。

当我在 bean 中实例化 ZipOutputStream 对象时,它会创建一个 ZIP 文件并打开一个“打开 Extracts.zip”窗口,当我单击“确定”时,我收到错误,因为 ZIP 文件夹中没有文件。

请告诉我是否有任何方法可以将 zos 实例化移动到服务层而无需传递响应对象?

谢谢,拉兹

最佳答案

我发现我可以执行以下操作来解决我的问题 -

在我的 bean 类中,我编写了以下代码 -

HttpServletResponse response = (HttpServletResponse) getFacesContext().getExternalContext().getResponse();
ByteArrayOutputStream outputStream = null;

try {
outputStream = //Call service to generate the extract, return outputStream ;
if(outputStream != null){
response.setContentType(T3Constants.MIME_ZIP);
response.setHeader(T3Constants.CONTENT_DISPOSITION, ATTACH_FILE_NAME);
response.getOutputStream().write(outputStream.toByteArray());
response.flushBuffer();
FacesContext.getCurrentInstance().responseComplete();
outputStream.close();
} else {
formatFacesMessage(FacesMessage.SEVERITY_WARN, "No data for selected filter", "No data for selected filter");
}
}

在我的服务中,我编写了以下代码 -

ByteArrayOutputStream outputStream = null;
if(CollectionUtils.isNotEmpty(list returned from DB)) {
outputStream = new ByteArrayOutputStream();
ZipOutputStream zos = new ZipOutputStream(outputStream);
//Add files to ZIP
outputStream = new ByteArrayOutputStream();
workbook.write(outputStream);
zos.putNextEntry(new ZipEntry(xlsName.toString()));
zos.write(outputStream.toByteArray());
zos.flush();
zos.close();
return outputStream;
}

谢谢,拉兹

关于java - 需要一种在服务层实例化 ZipOutputStream 对象的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11131372/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com