Apache POI创建的xlsx文件稍后无法打开。检测到拉链炸弹

时间:2017-12-12 14:06:52

标签: java excel apache-poi

当我使用Apache POI创建xlsx文件时(当文件很大时)它会创建一个不能由同一个Apache POI打开的文件,而MS Excel或LibreOffice Calc可以毫无问题地打开它。

当我尝试使用Apache POI打开此工作簿时,它会说

  

检测到拉链炸弹

只有在我调用ZipSecureFile.setMinInflateRatio(0)或在LibreOffice中重新保存它时我才能打开它(MS Excel在这里没有帮助)。

如何解决这个问题?为什么POI会创建无法打开的文件?

1 个答案:

答案 0 :(得分:2)

只需按照错误消息的建议进行操作,并通过

以不同方式设置限制

ZipSecureFile.setMinInflateRatio(0)

您似乎有一个相当特殊的用例,它产生的文件类似于恶意用户可能用来使服务器崩溃,耗尽CPU或内存不足的某些文件。为避免这种情况,Apache POI具有此限制,但允许在需要时以不同方式设置它。因此,如果文件不是来自不受信任的用户,您可以轻松调整这些限制以避免出现错误消息。

Excel或LibreOffice可能比Apache POI更优化文件内容,从而生成一个未达到这些限制的文件。