Chi*_*hid 4 java excel apache-poi
FileInputStream file = new FileInputStream("/file/path/report.xlsx");
XSSFWorkbook wb = new XSSFWorkbook(file); --!ERROR LINE!--
Run Code Online (Sandbox Code Playgroud)
我在第二行出现错误。我看了不同的在线资源,例如:
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
Run Code Online (Sandbox Code Playgroud)
我添加了 ZipSecureFile.setMinInflateRatio(0.009);
FileInputStream file = new FileInputStream("/file/path/report.xlsx");
ZipSecureFile.setMinInflateRatio(0.009);
XSSFWorkbook wb = new XSSFWorkbook(file);
Run Code Online (Sandbox Code Playgroud)
它工作了一段时间,然后开始抛出相同的错误
任何帮助或指导表示赞赏。
添加以下行对我有用。
ZipSecureFile.setMinInflateRatio(-1.0d);
Run Code Online (Sandbox Code Playgroud)
代码如下:
FileInputStream file = new FileInputStream("/file/path/report.xlsx");
ZipSecureFile.setMinInflateRatio(-1.0d);
XSSFWorkbook wb = new XSSFWorkbook(file);
Run Code Online (Sandbox Code Playgroud)