将Apache POI XLSX生成的文件上传到CodeIgniter网站

时间:2019-03-21 08:34:28

标签: java php codeigniter apache-poi

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

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

但是,这是我的问题:上载自动生成的文件时,CodeIgniter拒绝文件,指出不允许使用此文件类型。可能不是Apache POI库没有创建的缺少属性,但是我没有找到哪个属性。

另一个有趣的事实是,当使用Microsoft Excel打开Apache Poi自动生成的文件,然后不做任何修改就将其保存时,该文件将获得类似于3Ko的数据,并且对CodeIgniter生效。 LibreOffice Calc显然添加了一些数据,但与Microsoft Excel却不一样,它不适用于LibreOffice Calc。

您是否知道可能缺少哪些属性或数据?有什么方法可以解决我的问题?


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


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

1 个答案:

答案 0 :(得分:0)

这种奇怪的行为最终来自XLSX文件格式的歧义。它涵盖两种不同的文件格式(如您在https://www.filesignatures.net/随附的图片中所见)。 application/vnd.openxmlformats-officedocument.spreadsheetml.sheet仅将第二个文件识别为finfo_file,而Apache Poi会生成第一种类型的文件。因此,上传失败表明文件类型不允许。

enter image description here