【发布时间】:2017-10-19 23:04:10
【问题描述】:
FileInputStream file = new FileInputStream("/file/path/report.xlsx");
XSSFWorkbook wb = new XSSFWorkbook(file); --!ERROR LINE!--
第二行出现错误。我查看了不同的在线资源,例如:
Error reading Excel .XLSX with Apache POI
Exception in thread "main" java.io.IOException: Failed to read zip entry source
at org.apache.poi.openxml4j.opc.ZipPackage.<init>(ZipPackage.java:106)
at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:342)
at org.apache.poi.util.PackageHelper.open(PackageHelper.java:37)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:285)
at test.test.main(test.java:48)
Caused by: java.io.IOException: Zip bomb detected! The file would exceed the max. ratio of compressed file size to the size of the expanded data. This may indicate that the file is used to inflate memory usage and thus could pose a security risk. You can adjust this limit via ZipSecureFile.setMinInflateRatio() if you need to work with files which exceed this limit. Counter: 1483367, cis.counter: 14796, ratio: 0.009974605070761314Limits: MIN_INFLATE_RATIO: 0.01
at org.apache.poi.openxml4j.util.ZipSecureFile$ThresholdInputStream.advance(ZipSecureFile.java:257)
at org.apache.poi.openxml4j.util.ZipSecureFile$ThresholdInputStream.read(ZipSecureFile.java:214)
at java.io.FilterInputStream.read(Unknown Source)
at org.apache.poi.openxml4j.util.ZipInputStreamZipEntrySource$FakeZipEntry.<init>(ZipInputStreamZipEntrySource.java:132)
at org.apache.poi.openxml4j.util.ZipInputStreamZipEntrySource.<init>(ZipInputStreamZipEntrySource.java:56)
at org.apache.poi.openxml4j.opc.ZipPackage.<init>(ZipPackage.java:99)
... 4 more
我添加了 ZipSecureFile.setMinInflateRatio(0.009);
FileInputStream file = new FileInputStream("/file/path/report.xlsx");
ZipSecureFile.setMinInflateRatio(0.009);
XSSFWorkbook wb = new XSSFWorkbook(file);
它工作了一段时间,然后开始抛出同样的错误
感谢任何帮助或指导。
【问题讨论】:
-
如果您信任该文件,如果您输入一个更晚的比率会发生什么?
-
@Gagravarr 我信任该文件,有没有办法覆盖检查?像,ZipSecureFile.setMinInflateRatio(-1.0d); ?
-
IIRC 你可以设置
0的比率来禁用检查,但只有在你信任文件的情况下才这样做! -
@Gagravarr 谢谢。
(-1.0d)是什么意思?和通过(0)有什么不同。
标签: java excel apache-poi