From 17d232304f238ccbdab7241b14a2570fa6ef9551 Mon Sep 17 00:00:00 2001 From: Looly Date: Tue, 30 Jul 2024 10:27:30 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0GlobalPoiConfig?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 1 + .../java/cn/hutool/poi/GlobalPoiConfig.java | 48 +++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 hutool-poi/src/main/java/cn/hutool/poi/GlobalPoiConfig.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 8d0aa2504..59d101eb5 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ * 【core 】 CharSequenceUtil增加stripAll方法(pr#3659@Github) * 【crypto 】 支持"RSA/ECB/OAEPWithSHA-1AndMGF1Padding"的RSA加解密(pr#3675@Github) * 【core 】 Opt增加ifFail(pr#1239@Gitee) +* 【poi 】 增加GlobalPoiConfig(issue#IAEHJH@Gitee) ### 🐞Bug修复 * 【core 】 修复因RFC3986理解有误导致的UrlPath处理冒号转义问题(issue#IAAE88@Gitee) diff --git a/hutool-poi/src/main/java/cn/hutool/poi/GlobalPoiConfig.java b/hutool-poi/src/main/java/cn/hutool/poi/GlobalPoiConfig.java new file mode 100644 index 000000000..2f4610447 --- /dev/null +++ b/hutool-poi/src/main/java/cn/hutool/poi/GlobalPoiConfig.java @@ -0,0 +1,48 @@ +package cn.hutool.poi; + +import org.apache.poi.openxml4j.util.ZipSecureFile; + +/** + * POI的全局设置 + * + * @author Looly + * @see ZipSecureFile + * @since 5.8.30 + */ +public class GlobalPoiConfig { + + /** + * 设置解压时的最小压缩比例
+ * 为了避免`Zip Bomb`,POI中设置了最小压缩比例,这个比例为: + *
+	 *     压缩后的大小/解压后的大小
+	 * 
+ *

+ * POI的默认值是0.01(即最小压缩到1%),如果文档中的文件压缩比例小于这个值,就会报错。
+ * 如果文件中确实存在高压缩比的文件,可以通过这个全局方法自定义比例,从而避免错误。 + * + * @param ratio 解压后的文件大小与原始文件大小的最小比率,小于等于0表示不检查 + */ + public static void setMinInflateRatio(final double ratio) { + ZipSecureFile.setMinInflateRatio(ratio); + } + + /** + * 设置单个Zip文件中最大文件大小,默认为4GB,即32位zip格式的最大值。 + * + * @param maxEntrySize 单个Zip文件中最大文件大小,必须大于0 + */ + public static void setMaxEntrySize(final long maxEntrySize) { + ZipSecureFile.setMaxEntrySize(maxEntrySize); + } + + /** + * 设置解压前文本的最大字符数,超过抛出异常。 + * + * @param maxTextSize 文本的最大字符数 + * @throws IllegalArgumentException for negative maxTextSize + */ + public static void setMaxTextSize(final long maxTextSize) { + ZipSecureFile.setMaxTextSize(maxTextSize); + } +}