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