Upload xls or xlsx files with codeigniter, mime-type error
好吧,我相信这本身并不是Codeigniter的问题,因为它更像是哑剧类型。
我正在尝试上载一个文件,一个xls(或xlsx)文件和mime类型的浏览器,而php报告是application / octet-stream而不是application / excel,application / vnd.ms-excel或application / msexcel用于xls文件。当然,codeigniter上载插件会尝试将文件扩展名与mime-type匹配时报告错误(无效的文件类型)。
奇怪的是,相同的代码已经工作了几个月,现在却停止使用最新的Chrome(16.0.912.77),Firefox(10.0)和IE9。
是否有人遇到过相同(或相似)的问题并愿意分享解决方案?
非常感谢你。
PS:我不会提供代码,因为这并不是真正的代码问题,但是如有必要,我会上传一些代码片段。
编辑
可能是相关的:在具有类似配置的相同浏览器上,但在MS Office而非Libre Office上(在我的电脑上),不会发生该错误。在基于GNU / Linux + Libre Office的系统上也不会发生这种情况。因此,是Windows在开源套件上发挥作用,还是Libre Office仅仅为了改变它而改变了mime类型?
我也收到此错误。
CI报告的文件类型为" application / zip",这很有意义,因为xlsx格式是压缩格式(将其重命名为zip即可打开内容)。
我已将以下行添加/替换为mime类型文件(application / config / mimes.php):
1 | 'xlsx' => array('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet','application/zip'), |
并且有效(至少适用于该浏览器!)
请通过以下说明和提示轻松获得答案!
描述:
实际上,有很多人建议在文件(application / config / mimes.php)中添加/替换以下行:
1 | 'xlsx' => array('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/zip'), |
但是我已经意识到,在CodeIgniter版本2.2。*中,问题有点不同!
他们已经添加了该行,但是忘记添加以下" file_type" ==>'application / vnd.ms-excel'
1 | 'xlsx' => array('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/zip', 'application/vnd.ms-excel'), |
因此,将上面的'application / vnd.ms-excel'添加到xlsx文件类型数组中,让我上传.xlsx文件!
暗示:
每当您在CodeIgniter平台上遇到以下错误并上传文件时:
The filetype you are attempting to upload is not allowed.
在Controller的上载方法中执行以下操作,
1 |
它将为您提供一个庞大的数组,您可以从此链接中获得想法(请参阅该页面的末尾)。在该数组中,您可以获得尝试上载但不给您上载的文件的真正mime_type是什么。
回答:
在我的情况下,我的文件扩展名为.xlsx,而mime类型为application / vnd.ms-excel,该文件未添加到
1 | 'xlsx' => array('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/zip'), |
所以我手动添加了它,然后它就可以正常工作了!!!
当我将文件扩展名添加为.csv,但将MIME类型为text / plain时,再次将CSV上传到同一行时,发生了同样的事情:
1 | 'csv' => array('text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'application/x-csv', 'text/x-csv', 'text/csv', 'application/csv', 'application/excel', 'application/vnd.msexcel'); |
并保存如下
1 | 'csv' => array('text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'application/x-csv', 'text/x-csv', 'text/csv', 'application/csv', 'application/excel', 'application/vnd.msexcel', 'text/plain'), |
它就像一个魅力! :D
尝试一下,如果您在上述步骤中发现了新的内容,请在此处评论!!!
因此,希望这对所有CodeIgniter社区有所帮助,我花了一些时间发布它!
致以最诚挚的问候,
兰迪卡
仅作记录,我发现Windows注册表中缺少mime-type的原因,解决了使用.reg文件添加这些键的问题:
1 2 3 4 5 6 7 | Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\\Software\\Classes\\.xls] "Content Type"="application/excel" [HKEY_CURRENT_USER\\Software\\Classes\\.xlsx] "Content Type"="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" |
但是宁愿使用上面的解决方案,我也不希望弄乱注册表。
几个月前这是一个CI错误:https://github.com/EllisLab/CodeIgniter/issues/394。该框架中的mimes.php已更新,并且错误已得到解决。将您的CodeIgniter库更新为2.1.0(或更高版本)。
服务器mime类型也是测试/转储的好东西。
另一种选择是强制mime类型。使用.htaccess,那将是
1 | AddType application/excel .xls .xlsx |
对于整个调试过程,请使用File Helper(http://codeigniter.com/user_guide/helpers/file_helper.html)使用