使用 CodeIgniter 提供的上传类,设置允许的 MIME 类型为:
#这样
$config['allowed_types'] = 'gif|jpg|jpeg|png|bmp|webp';
#也或者这样
$config['allowed_types'] = 'image/jpeg|image/png|image/gif|image/bmp|image/x-ms-bmp|image/webp';
换言之就是只允许图片进行上传,但是存在一个问题。CI 会根据文件的后缀名和 MIME 类型进行匹配,也就是说。
1.jpg
本身 MIME 类型是image/jpeg
,这样上传是没有问题的。1.jpg
修改为1.png
,然后 CI 就会去获取后缀.png
,但获取到的 MIME 类型仍然是image/jpeg
,这就造成获取到的后缀和真实 MIME 类型不匹配。导致无法上传,提示错误“ The filetype you are attempting to upload is not allowed.”请问大佬有遇到这种情况吗?如何解决?谢谢。
1
linauror 2019-04-29 11:11:48 +08:00 1
改 config/mimes.php 针对于图片部分的配置,每个后缀多加几个 type 就行
|
2
xiaoz OP @linauror 好的,谢谢,这个可行。还想到一个就是先允许所有文件上传,再判断 mime 类型,不是图片就删除。但感觉都不是很完美,不知道为什么 ci 没考虑到这个问题。
|
3
linauror 2019-04-29 11:56:13 +08:00
其实这个本来就是先把文件传上来的,一般在 tmp 目录下,然后再 move 的,后面检测失败的,tmp 目录会自动清除掉
|
4
care 2019-04-29 12:35:01 +08:00 via iPhone
我想知道 CodeIgniter 怎么配置 CDN 加速^_^
|
6
unicloud 2019-04-29 14:30:21 +08:00 via iPhone
你自己把.jpg 改成.png ,不能上传难道不是正常的吗?那要是能上传,那些危险脚本岂不是任意上传了?
|
7
no1xsyzy 2019-04-29 14:59:30 +08:00
@unicloud 其实同为图片后缀错的情况还不少见
尤其一些缺筋图床,不管什么类型 URL 都是 .jpg ,MIME 都是 application/octet-stream …… 我 IrfanView 打开就提示 “ This is a PNG file with a .jpg extension, rename?” 但很多图片查看器是不管的。 |
8
xiaoz OP @unicloud 因为设置了多个允许的 MIME 类型,.jpg/.png 的 MIME 类型包含在其中,虽然后缀不对,但 MIME 类型是存在的,个人觉得应该允许才对。
|
9
care 2019-04-29 19:40:17 +08:00 via iPhone
@xiaoz 我买了一个老外的基于 ci 框架的网站源码,然后想配置 cdn 加速,作者提供了一个国外的 cdn 服务商的配置示例: https://cdnsun.com/knowledgebase/integrations/codeigniter-cdn-integration 但是我根据此教程来配置七牛 cdn,根本不行。作者又不提供技术支持…
|
10
xiaoz OP @care 七牛云支持镜像存储,我看了下他代码应该是可以实现图片等静态资源 CDN 加速的。或者用 nginx 的 subs_filter 模块替换也行。可以加我 QQ:337003006 可以收费帮您搞定。
|
11
alex321 2019-05-08 09:23:17 +08:00
其实就是扩展个 static_url() 方法,这个很基础啊。。。
|