【问题标题】:CodeIgniter 2 - can't upload .docx fileCodeIgniter 2 - 无法上传 .docx 文件
【发布时间】:2019-03-01 01:36:07
【问题描述】:

以前出现过这个问题,我关注了this answer,但没有任何乐趣。

我正在尝试将 .docx 文件上传到我的 CI 应用程序,但它给了我

您尝试上传的文件类型不允许。

现在,当我通过将 system/libraries/upload.php 的第 199 行更改为 vardump 接收文件的 mimetype 时

$this->_file_mime_type($_FILES[$field]); die(var_dump($this->file_type));

我明白了

application/vnd.openxmlformats-officedocument.wordprocessingml.document; 字符集=二进制

...在我的 application/config/mimes.php 文件中列出作为 docx 可接受的 mime。

既然如此,还有什么问题?

【问题讨论】:

  • 您是否在接受表单输入的控制器中指定了允许的类型?确保您正确设置了允许的类型:$config['allowed_types'] = 'docx|pdf|xlsx';(修改为仅接受您想要的文件类型)。 CI 2 文件上传类可能会有所帮助:codeigniter.com/userguide2/libraries/file_uploading.html
  • 您是否将扩展名设置为允许的类型,例如在您的上传控制器中,仅将其列在 mime 类型中并不意味着它可以上传。设置 $config['allowed_types'] = 'gif|jpg|png|pdf|docx|doc';
  • 啊,好地方。刚刚添加它......但它仍然不允许上传 .docx。现在肯定在我的allowed_types 配置参数中列出...
  • 所以事实证明,当它深入 CI 的 system/libraries/uploads.php 脚本时,MIME 已经以某种方式演变为 application/msword。这个不是在我的 mime 中(根据我粗略的研究,它甚至不是一个有效的 .docx MIME)。所以我不知道它是如何从程序早期的正确 MIME 得到的。无论如何,该 MIME 现在已添加到我的列表中并且现在可以使用了。
  • @Utkanos 您能否发表您的最后评论(也许还有更多见解)作为答案,谢谢

标签: php codeigniter upload mime-types docx


【解决方案1】:

事实证明,在 CI 流程的某个地方,mime 已经从

application/vnd.openxmlformats-officedocument.wordprocessingml.document

应用程序/msword

我不知道这发生在什么时候,也不知道为什么。当我在 CI 控制器方法中运行以下命令时,我得到的是前者。

$finfo = finfo_open(FILEINFO_MIME);
$mime = finfo_file($finfo, 'path/to/file.docx');
var_dump($mime);

所以我不知道它是如何一路变成后者的。

不用说,将“application/msword”添加到上传选项的allowed_types 区域(传递给$this->upload->initialize($options))即可解决问题。

【讨论】:

    【解决方案2】:

    我最近遇到了同样的问题,花了一整天的时间来解决它,但没有成功。 我建议您不要浪费时间,只允许所有文件,然后执行 php 函数来检查文件是否为 .docx

    【讨论】:

    • 嗯,我明白你为什么要这样做,但这不是一个有吸引力的解决方案。 CI 正确地派生了 mime 类型,并且该 mime 类型列在其 mimes 白名单中,因此它必须是 CI 中某处的故障。
    猜你喜欢
    • 2016-07-10
    • 2019-01-22
    • 2015-11-06
    • 2020-02-05
    • 2017-01-26
    • 2013-10-04
    • 1970-01-01
    • 1970-01-01
    • 2012-11-13
    相关资源
    最近更新 更多