Zip-бомба обнаружила исключение, созданное Apache-POI при открытии существующих файлов xlsx со сводными таблицами

Я пытаюсь открыть существующий файл xlsx (Ms-excel 2010), чтобы добавить дополнительные данные с помощью Apache-POI (v 3.15).

Существующий файл xlsx (размер 700 КБ) содержит несколько вкладок с сводные таблицы, диаграммы и т. д.

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

Но выброшенное исключение, как показано ниже,

Причина: java.io.IOException: Обнаружена Zip-бомба! Файл превысит макс. отношение размера сжатого файла к размеру расширенных данных. Это может указывать на то, что файл используется для увеличения использования памяти и, таким образом, может представлять угрозу безопасности. Вы можете настроить этот лимит с помощью ZipSecureFile.setMinInflateRatio(), если вам нужно работать с файлами, которые превышают этот лимит. Счетчик: 819241, cis.counter: 8192, коэффициент: 0,009999499536766349Ограничения: MIN_INFLATE_RATIO: 0,01 в org.apache.poi.openxml4j.util.ZipSecureFile$ThresholdInputStream.advance(ZipSecureFile.java:257)

Я попробовал следующие изменения:
1. попытался изменить "ZipSecureFile.setMinInflateRatio()", чтобы исправить tihs, но JVM вылетает с ошибкой пространства в куче (хотя я выделил более 4 ГБ)
2. попытался использовать inputsteam , Workbookfactory.create для создания книги, пытался открыть как SXSSF.

Но ничего из этого не сработало для меня. У кого-нибудь есть идеи?


person sachinsd    schedule 12.12.2016    source источник
comment
с таким большим файлом excel я не могу его проверить, к сожалению, но это действительно проблема размера файла, потому что файл excel 75kb работает гладко   -  person XtremeBaumer    schedule 12.12.2016
comment
700 КБ не кажется большим для файла, поскольку я вижу, что он должен иметь возможность управлять файлами даже размером МБ. Сказав это, я пробовал только с одной вкладкой с существующей сводной таблицей (размер около 50 КБ), и все та же проблема. Так что мне кажется, что речь идет о сводных таблицах и ссылках, чем о размере.   -  person sachinsd    schedule 12.12.2016
comment
насколько велики ваши сводные таблицы? они расширены?   -  person XtremeBaumer    schedule 12.12.2016
comment
Не обязательно, некоторые из них очень маленькие, и я попытался использовать только одну вкладку с этой маленькой сводной таблицей, но все же такое же исключение zip-бомбы! (Я не уверен, как я могу предоставить эти примеры сводных таблиц здесь)   -  person sachinsd    schedule 12.12.2016
comment
Я думаю, вам нужно будет загрузить их куда-нибудь   -  person XtremeBaumer    schedule 13.12.2016
comment
Файл имеет сжатый размер 700 КБ, в несжатом виде он кажется намного больше из-за данных, которые у вас есть. .xlsx — это файл .zip. Можете ли вы попытаться разархивировать его и посмотреть, насколько велики полученные файлы?   -  person centic    schedule 13.12.2016


Ответы (2)


Итак, я нашел решение проблемы, но, как и в случае со многими проблемами, связанными с Microsoft, я не смог найти основную причину.

Поскольку этот шаблон был предоставлен аналитиками, работавшими над ним ранее (просто удалив биты данных), я подумал, что файл Excel может быть проблемой.

Что я сделал, так это начал новую электронную таблицу с одинаковыми сводными таблицами, созданными одну за другой с нуля на каждой вкладке (немного ручной работы, но это не заняло много времени). Окончательный шаблон был размером 60 КБ, поэтому должны были быть какие-то скрытые данные / «нечто невидимое», которые были там раньше и вызывали сбой.

Мне удалось использовать этот шаблон для создания нового листа Excel и успешно добавить данные около 600 тыс. строк за секунды. Потрясающий!

person sachinsd    schedule 15.12.2016

Немного поздно ответить на это. надеюсь, это поможет людям, столкнувшимся с такой же проблемой.

Для меня сработало

ZipSecureFile.setMinInflateRatio(0.0);

здесь можно посмотреть описание

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

person techasutos    schedule 26.10.2020