请教关于 CodeIgniter 上传类的问题

2019-04-29 10:40:40 +08:00
 xiaoz

使用 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. 1.jpg本身 MIME 类型是image/jpeg,这样上传是没有问题的。
  2. 但是如果我将1.jpg修改为1.png,然后 CI 就会去获取后缀.png,但获取到的 MIME 类型仍然是image/jpeg,这就造成获取到的后缀和真实 MIME 类型不匹配。导致无法上传,提示错误“ The filetype you are attempting to upload is not allowed.”
  3. 感觉有点坑啊,直接验证 MIME 类型不就完了,非要后缀和 MIME 类型完全匹配

请问大佬有遇到这种情况吗?如何解决?谢谢。

3282 次点击
所在节点    PHP
11 条回复
linauror
2019-04-29 11:11:48 +08:00
改 config/mimes.php 针对于图片部分的配置,每个后缀多加几个 type 就行
xiaoz
2019-04-29 11:29:48 +08:00
@linauror 好的,谢谢,这个可行。还想到一个就是先允许所有文件上传,再判断 mime 类型,不是图片就删除。但感觉都不是很完美,不知道为什么 ci 没考虑到这个问题。
linauror
2019-04-29 11:56:13 +08:00
其实这个本来就是先把文件传上来的,一般在 tmp 目录下,然后再 move 的,后面检测失败的,tmp 目录会自动清除掉
care
2019-04-29 12:35:01 +08:00
我想知道 CodeIgniter 怎么配置 CDN 加速^_^
xiaoz
2019-04-29 13:16:27 +08:00
@care 配置 CDN 和 CodeIgniter 本身没什么关系吧。
unicloud
2019-04-29 14:30:21 +08:00
你自己把.jpg 改成.png ,不能上传难道不是正常的吗?那要是能上传,那些危险脚本岂不是任意上传了?
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?”
但很多图片查看器是不管的。
xiaoz
2019-04-29 15:05:54 +08:00
@unicloud 因为设置了多个允许的 MIME 类型,.jpg/.png 的 MIME 类型包含在其中,虽然后缀不对,但 MIME 类型是存在的,个人觉得应该允许才对。
care
2019-04-29 19:40:17 +08:00
@xiaoz 我买了一个老外的基于 ci 框架的网站源码,然后想配置 cdn 加速,作者提供了一个国外的 cdn 服务商的配置示例: https://cdnsun.com/knowledgebase/integrations/codeigniter-cdn-integration 但是我根据此教程来配置七牛 cdn,根本不行。作者又不提供技术支持…
xiaoz
2019-04-29 20:22:22 +08:00
@care 七牛云支持镜像存储,我看了下他代码应该是可以实现图片等静态资源 CDN 加速的。或者用 nginx 的 subs_filter 模块替换也行。可以加我 QQ:337003006 可以收费帮您搞定。
alex321
2019-05-08 09:23:17 +08:00
其实就是扩展个 static_url() 方法,这个很基础啊。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/559673

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX