【问题标题】:"Zip bomb detected" exception thrown by Apache-POI while opening existing xlsx files with pivot tablesApache-POI 在使用数据透视表打开现有 xlsx 文件时引发“检测到 Zip 炸弹”异常
【发布时间】:2016-12-12 15:37:06
【问题描述】:

我正在尝试使用 Apache-POI (v 3.15) 打开现有的 xlsx 文件 (Ms-excel 2010) 以附加更多数据。

现有的 xlsx 文件(大小 700Kb)包含多个带有 pivot tables 的选项卡、图表等。

File file = new File(FILE_PATH);
OPCPackage opcPackage = OPCPackage.open(file);
XSSFWorkbook wbk = new XSSFWorkbook(opcPackage);

但是抛出的异常如下,

原因:java.io.IOException: Zip 炸弹检测到!该文件将 超过最大值。压缩文件大小与文件大小之比 扩展数据。这可能表明该文件用于膨胀 内存使用,因此可能会带来安全风险。你可以调整这个 如果您需要使用,请通过 ZipSecureFile.setMinInflateRatio() 进行限制 超过此限制的文件。计数器:819241,顺式计数器:8192, 比率:0.009999499536766349 限制:MIN_INFLATE_RATIO:0.01 at org.apache.poi.openxml4j.util.ZipSecureFile$ThresholdInputStream.advance(ZipSecureFile.java:257)

我尝试了以下更改:
1. 尝试更改“ZipSecureFile.setMinInflateRatio()”以修复 tihs,但 JVM 因堆空间错误而崩溃(即使我分配了超过 4GB)
2.尝试使用inputsteam,Workbookfactory.create创建工作簿,尝试以SXSSF方式打开。

但是这些都对我不起作用。有人知道吗?

【问题讨论】:

  • 这么大的 excel 文件我无法测试它,但它确实似乎是文件大小的问题,因为 75kb 的 excel 文件工作顺利
  • 700KB 似乎并不比文件大,因为我可以看到它应该能够管理大小为 MB 的文件。话虽如此,我只尝试了一个带有现有数据透视表(大小约为 50Kb)的选项卡,但仍然是同样的问题。所以在我看来,它是关于数据透视表和引用而不是大小。
  • 您的数据透视表有多“大”?他们扩大了吗?
  • 没必要,其中一些非常小,我尝试只使用一个带有那个小数据透视表的选项卡,但仍然是相同的 zip 炸弹异常! (我不确定如何在此处提供这些数据透视表示例)
  • 我认为您必须将它们上传到某个地方

标签: java excel apache apache-poi xssf


【解决方案1】:

所以我找到了问题的解决方案,但与许多与 Microsoft 相关的问题一样,我无法特别找到根本原因。

由于这个模板是由之前研究它的分析师提供的(通过删除数据位),我觉得 excel 文件可能是一个问题。

我所做的是,我开始使用相同的数据透视表在每个选项卡中从头开始创建新的电子表格(有点手动但没花很长时间)。 最终的模板是 60Kb,所以之前一定有一些隐藏的数据/“不可见的东西”,导致这个失败。

我设法使用此模板创建了新的 Excel 工作表,并在几秒钟内成功添加了大约 60 万行的数据。太棒了!

【讨论】:

    【解决方案2】:

    回答这个问题有点晚了。 希望它能帮助面临同样问题的人。

    对我来说有效的是

    ZipSecureFile.setMinInflateRatio(0.0);

    你可以看看这里的描述

    https://community.pega.com/node/715956

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多