CodeIgniter 是一套小巧但功能强大的、给 PHP 网站开发者使用的 Web 应用程序开发框架和工具包。
问题
CodeIgniter 官方封装好了上传类,非常方便,但在实际使用中会遇到一些问题,发现部分文件无法上传,提示“The filetype you are attempting to upload is not allowed.”错误。
情况一:无法上传.webp的图片
CodeIgniter 上传类通过allowed_types 来指定允许文件的MIME文件类型,即使已经指定了.webp 格式的图片,但仍然无法上传。发现CodeIgniter的MIME类型中根本不支持.webp
打开application/config/mimes.php
在数组里面追加一行:
'webp' => 'image/webp'
最终问题得以解决,如果其它后缀也有这个情况,也可以按照这个方法来增加指定后缀和MIME类型。
情况二:已经允许多个图片MIME类型,但图片仍然无法上传
比如xiaoz已经参数中指定以下图片可以上传:
$config['allowed_types'] = 'gif|jpg|jpeg|png|bmp|webp';
但某些时候发现一张普通的.jpg
格式上传仍然会报“The filetype you are attempting to upload is not allowed.”错误。最后发现原因是后缀名和实际的MIME类型不一致导致,也就是说这张.jpg
格式的图片MIME类型可能是image/png
(.png)
CodeIgniter会获取文件的后缀和MIME类型,然后进行匹配,如果不一致就会导致上传失败,解决办法就是修改application/config/mimes.php
对jpg
这一行增加多个MIME类型。
'jpg' => array('image/jpeg', 'image/pjpeg', 'image/png', 'image/gif', 'image/bmp', 'image/x-ms-bmp'),
另一种解决办法
还有一种办法就是先允许所有类型的文件上传
$config['allowed_types'] = '*';
然后再对文件的MIME类型进行判断,如果是不允许的MIME类型将其删除,同时返回错误。
CodeIgniter上传类说明可参考:文件上传类
牛