当我使用Apache POI创建xlsx文件时(当文件很大时)它会创建一个不能由同一个Apache POI打开的文件,而MS Excel或LibreOffice Calc可以毫无问题地打开它。
当我尝试使用Apache POI打开此工作簿时,它会说
检测到拉链炸弹
只有在我调用ZipSecureFile.setMinInflateRatio(0)
或在LibreOffice中重新保存它时我才能打开它(MS Excel在这里没有帮助)。
如何解决这个问题?为什么POI会创建无法打开的文件?
答案 0 :(得分:2)
只需按照错误消息的建议进行操作,并通过
以不同方式设置限制 ZipSecureFile.setMinInflateRatio(0)
您似乎有一个相当特殊的用例,它产生的文件类似于恶意用户可能用来使服务器崩溃,耗尽CPU或内存不足的某些文件。为避免这种情况,Apache POI具有此限制,但允许在需要时以不同方式设置它。因此,如果文件不是来自不受信任的用户,您可以轻松调整这些限制以避免出现错误消息。
Excel或LibreOffice可能比Apache POI更优化文件内容,从而生成一个未达到这些限制的文件。