首页 > 解决方案 > java - 如何在不使用POI打开的情况下检查文件是java中的有效xlsx文件

问题描述

在 java (jdk 1.6) 中有一种方法可以检查文件是否为有效的 xlsx,而无需使用 POI 或其他 API 打开整个文件。目前我们在项目中使用 Apache POI 来打开文件 - 基本上我们创建一个新的 XSSFWorkbook(inputStream),如果抛出异常,它不是有效的 xlsx。但是,我们发现一个 8MB 的 xlsx 文件由于某种原因需要 1GB 内存才能打开,实际上导致我们的服务器生产中断。我们不能依赖文件扩展名,因为有人可以将一个不是 xlsx 的文件(如 php 文件)重命名为 xlsx 扩展名。我正在寻找一些对内存影响最小的选项 - 理想情况下根本不打开文件。

如果单个文件上传可以杀死服务器,那么风险太大了,但我们仍然需要验证文件实际上是 xlsx。

标签: javaexcelapache-poifile-type

解决方案


如果您根本不知道您的文件是什么,请使用Apache Tika进行检测 - 它可以为您检测大量不同的文件格式。

使用 Apache POI 确定 MS Excel 文件类型

这里有一些例子https://www.baeldung.com/apache-tika


推荐阅读