java - java - 如何在不使用POI打开的情况下检查文件是java中的有效xlsx文件
问题描述
在 java (jdk 1.6) 中有一种方法可以检查文件是否为有效的 xlsx,而无需使用 POI 或其他 API 打开整个文件。目前我们在项目中使用 Apache POI 来打开文件 - 基本上我们创建一个新的 XSSFWorkbook(inputStream),如果抛出异常,它不是有效的 xlsx。但是,我们发现一个 8MB 的 xlsx 文件由于某种原因需要 1GB 内存才能打开,实际上导致我们的服务器生产中断。我们不能依赖文件扩展名,因为有人可以将一个不是 xlsx 的文件(如 php 文件)重命名为 xlsx 扩展名。我正在寻找一些对内存影响最小的选项 - 理想情况下根本不打开文件。
如果单个文件上传可以杀死服务器,那么风险太大了,但我们仍然需要验证文件实际上是 xlsx。
解决方案
如果您根本不知道您的文件是什么,请使用Apache Tika进行检测 - 它可以为您检测大量不同的文件格式。
推荐阅读
- timestamp - 更改 MariaDB 表行中时间戳值的正确方法是什么
- python - 区域明智的 SKU 贡献
- php - array_search 与第一个键不匹配
- c# - 如何获取 api 控制器中所有操作的完整 url
- mysql - 为什么在 MySQL 上删除表的某些行后我的可用磁盘空间减少了?
- qt - QML 切换窗口标志
- asp.net-core - 从 Razor 填充 Knockout 的可观察数组
- c# - 带有 Azure Active Directory 的 Web 应用程序始终重定向到“~/.auth/login/done”URL
- mysql - 如何为Django(MySQL后端)中的每个表设置不同的存储引擎?
- r - 每组子集特定行