gpt4 book ai didi

java - 为什么 Apache POI XSSF 无法写入 servlet 响应输出流?

转载 作者:行者123 更新时间:2023-12-01 09:11:42 39 4
gpt4 key购买 nike

我创建了一个 servlet,它创建一个 XSSFWorkbook 并将其写入响应的输出流。奇怪的是,当我尝试在浏览器(Chrome v54.0.2840.98)中测试功能时,我只能获取 xlsx 文件一次(该文件打开时没有任何格式问题,并且也具有预期的内容)但是如果我使用浏览器中的“后退”按钮导航离开可用此功能的页面,并立即返回同一页面并尝试再次获取相同的文件,我不会在响应中收到任何内容。此外,我的其他 servlet 也会停止工作,直到我打开一个新选项卡。我已经在不同的浏览器(Safari v9.1.2(11601.7.7))中进行了尝试,一切都按预期工作,没有任何问题。这是我使用的代码:

@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
DateTime now = new DateTime();
Workbook workbook = createWorkbook(); //creates an XSSFWorkbook

response.setContentType("application/vnd.ms-excel");
response.setHeader(
"Content-Disposition",
"attachment; filename=\"excel-export-" + now.toString("yyyy-MMM-dd") + ".xlsx\""
);

BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(response.getOutputStream());
workbook.write(bufferedOutputStream);
}

当我在开发环境中运行代码时,没有出现任何异常,状态为 200,但仍然没有下载任何内容。有时我会得到一个

   org.apache.poi.openxml4j.exceptions.OpenXML4JRuntimeException:Fail to save: an error occurs while saving the package : The part /docProps/core.xml fail to be saved in the stream with marshaller org.apache.poi.openxml4j.opc.internal.marshallers.ZipPackagePropertiesMarshaller

经过大量调试后,我可以通过将 null 传递给 workbook.write() 函数来重现:

workbook.write(null);

感谢您的帮助,感谢您的阅读!

Javax Servlet API v2.5Apache-POI v3.15Java 8 JDK(1.8.0_111)

更新如果我收到异常,它看起来像这样(堆栈跟踪): https://gist.githubusercontent.com/darkstar85/b151e53b64498e1fb476d0f6f8ea4eaf/raw/ffb078c54b850922fcd4e467a6ebf9695aeb7354/gistfile1.txt

最佳答案

查看 Apache POI 的代码时,只有在 StreamHelper.saveXmlInStream(xmlDoc, out) 返回 false 时才会发生这种情况。此外,如果 XML 转换在 trans.transform(xmlSource, outputTarget); 行失败,则仅返回 false。

然而,它只是在这里进行身份转换(即简单的复制),因此,如果您的应用程序中可用的 XML 解析器以某种方式无法正常工作,那么这只会失败。

因此,我会检查您正在使用哪个 JDK 以及您的应用程序中是否添加了任何其他 XML 解析器,例如Xerces 或任何其他,看看是否可以删除它们。

关于java - 为什么 Apache POI XSSF 无法写入 servlet 响应输出流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40878239/

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