日常技术小笔记

使用php CodeIgniter 框架,在macOS 系统与linux/windows操作系统中使用phpExcel上传excel文件时的报错问题复原:在 mac 系统上使用 WPS 创建.xlsx为扩展名的 excel 文件。
在本机(mac)中正常上传,但是在 linux/windows 操作系统上传是报错:The filetype you are attempting to upload is not allowed 排查1.把文件上传后的扩展名和 MIME 类型都打印出来,得到的结果是扩展名都是一样的: .xlsx, 却得到了不同的 MIME 类型。
MAC:application/vnd.openxmlformats-officedocument.spreadsheetml.sheetlinux/windows :application/octet-stream; charset=binary2.查看 CI 源码分析发现不管那个操作系统都是使用 finfo_open()+finfo_file() 函数作为获取MIME类型的方法。
起初怀疑是finfo_open()+finfo_file() 在不同环境下判断可能存在不准确的情况,毕竟除了这种方法获取 MIME 之后还有其他方法,带着这个疑问使用 php 官网推荐的 mime_content_type() 函数测试,失望的是得到了同样的结果。
注:php5.3 废弃了 mime_content_type() 函数的使用,不过在 php5.3+ 之后又开始使用了,而官网不在维护 pecl 扩展包中的 fileinfo 函数。
 结论经测试结果,在 mac 操作系统中创建的 excel 文件,上传后确实会得到不同的 MIME 类型 解决方法有二 通过 CI 上传文件的配置项取消MIME的检测【推荐】$this->upload->detect_mime = FALSE;补充 config/mimes.php 中扩展名xlsx中对应的 mime 类型数组'xlsx' => array('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/zip', 'application/vnd.ms-excel', 'application/msword', 'application/x-zip', 'application/octet-stream')来源:https://www.jianshu.com/p/89b6354968f6宜岁月峥嵘不忘初心

返回列表
上一篇:
下一篇: