【问题标题】:Upload Apache POI XLSX generated files to CodeIgniter website将 Apache POI XLSX 生成的文件上传到 CodeIgniter 网站
【发布时间】:2019-08-12 01:42:45
【问题描述】:

我必须将 XLSX 文件上传到 Web 应用程序。此 Web 应用程序使用 CodeIgniter 来检查和导入这些文件。

此外,我必须从另一个文件生成这些 XLSX 文件。为了读写 XLSX 文件,我使用 Apache Poi。这部分很简单,效果很好。

但是,这是我的问题:上传自动生成的文件时,CodeIgniter 拒绝文件说这种文件类型是不允许的。这可能是 Apache POI 库未创建的缺失属性,但我没能找到哪个。

另一个“有趣”的事实是,当使用 Microsoft Excel 打开 Apache Poi 自动生成的文件,然后在不进行任何修改的情况下保存它时,该文件会获得类似 3Ko 的数据,并且对 CodeIgniter 有效。它不适用于 LibreOffice Calc,后者显然添加了一些数据,但与 Microsoft Excel 不同。

您知道哪些属性或数据可能会丢失吗?有什么方法可以解决我的问题?


编辑:经过更多调查并根据 php finfo_file 函数(由 CodeIgniter 使用),我的错误文件具有以下 MIME 类型 application/octet-stream,而合法文件具有以下 MIME 类型 application/vnd.openxmlformats-officedocument.spreadsheetml.sheet。然后,我认为 Apache Poi 在生成 XLSX 时存在一些错误。


编辑 2:最后,有 2 个 XLSX 类型(见随附的屏幕截图)。只有第二个被finfo_file 识别为application/vnd.openxmlformats-officedocument.spreadsheetml.sheet。不幸的是,Apache Poi 生成第一种类型的签名。因此,它不被识别为 XLSX。

【问题讨论】:

  • 向 CodeIgniter 报告错误?
  • 这可能是一个解决方案。但是 CodeIgniter 使用 fileinfo_file 函数来确定文件具有哪种 mime 类型。据我所知,这是一个非常常用且值得信赖的库。
  • 尝试调用那个独立的来检查?如果出现错误,请报告其中的错误!
  • 刚刚尝试过,它有效地获得了“application/octet-stream”mime 类型。我会报告一个错误!感谢您的帮助。

标签: java php codeigniter apache-poi


【解决方案1】:

这种奇怪的行为最终来自 XLSX 文件格式的模糊性。它涵盖了两种不同的文件格式(您可以在https://www.filesignatures.net/ 的随附图片中看到)。只有第二个被finfo_file 识别为application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,而 Apache Poi 生成第一个类型的文件。因此,上传失败,说明文件类型不允许。

【讨论】:

猜你喜欢
  • 2016-05-17
  • 1970-01-01
  • 1970-01-01
  • 2014-10-07
  • 2016-02-15
  • 1970-01-01
  • 2019-02-02
  • 2014-07-16
  • 1970-01-01
相关资源
最近更新 更多