CodeIgniter:“您正在尝试上传的文件types是不允许的。”

我正在经历一个非常奇怪的上传问题。 以下是相关的视图文件:

<form action="http://localhost/index.php/temp/upload/" method="post" enctype="multipart/form-data"> <fieldset> <input type="file" name="userfile"/> <input type="submit" value="Upload"/> </fieldset> </form> 

这里是我的temp控制器的upload()方法:

 public function upload() { $config['upload_path'] = FCPATH . 'uploads' . DIRECTORY_SEPARATOR; assert(file_exists($config['upload_path']) === TRUE); $config['allowed_types'] = 'avi|mpg|mpeg|wmv|jpg'; $config['max_size'] = '0'; $this->load->library('upload', $config); if ($this->upload->do_upload('userfile') === FALSE) { // Some error occured var_dump($this->upload->display_errors('', '')); var_dump($_FILES); } else { // Upload successful var_dump($this->upload->data()); } } 

当我上传一个AVIvideo,一切工作正常。 当我上传一个WMVvideo时,我得到以下的var转储:

 string 'The filetype you are attempting to upload is not allowed.' (length=57) array 'userfile' => array 'name' => string 'wmv.wmv' (length=7) 'type' => string 'video/x-ms-wmv' (length=14) 'tmp_name' => string 'C:\wamp\tmp\php2333.tmp' (length=23) 'error' => int 0 'size' => int 83914 

“wmv”扩展名被解释为MIMEtypes: video/x-ms-wmv 。 这应该没问题,因为我的config / mimes.php具有以下内容:

 'wmv' => array('video/x-ms-wmv', 'audio/x-ms-wmv') 

当我尝试上传其他文件时,情况与此类似。 到目前为止,似乎工作的唯一一个是我的testingAVIvideo。

任何想法可能是错的?

更新1:

一台我的机器,只有AVI上传。 在另一个开发人员的机器上,没有file upload。 在另一个开发人员的机器上,所有支持的file upload。 这些浏览器或服务器的问题?

你正在使用Firefox,不是吗?

您可以尝试查看system/libraries/Upload.php行199:

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

将该行更改为:

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

然后上传您的.wmv文件。 它会显示像application/octet-stream或任何东西。 添加到你的mimes.php 。 希望这个帮助=)

类似的答案在这里

一些链接:

  • CodeIgniter论坛的主题
  • Firefox中的Mimetype腐败
  • 解决IE的MIMEtypes的问题

$ config [“allowed_types”] =“*”;

  1. 使用FTP / SFTP / scp / etc将您的.wmvfile upload到服务器,您可以在其中运行CodeIgniter应用程序
  2. 在上传.wmv文件的服务器上,执行以下PHP代码

     <?php $file_path = 'CHANGE_THIS_TO_ABSOLUTE_FILE_PATH_THAT_YOU_HAVE_UPLOADED.wmv'; $finfo = finfo_open(FILEINFO_MIME); $mime = finfo_file($finfo, $file_path); var_dump($mime); ?> 
  3. 将代码保存为mime.php

  4. 在terminal运行 – $ php mime.php
  5. 如果它转储的任何其他值已经有wmv,请将该值附加到wmv mimetypes中。

还要检查其他开发机器中的PHP_VERSION。 finfo_open是在PHP 5.3中引入的。 上传工作的开发机器可能有一个较老版本的PHP,或者它可能有适合wmv的mimetypes。

我最近在Codeigniter的上传类中遇到了一些非常类似的问题。

* allowed_types *似乎没有工作。 例如,我想允许.PNG图像上传,但不允许他们通过它的filter。 我最终调查了一下。 我允许所有文件types临时上传,我上传了.PNG,然后转储上传数据( $ this-> upload-> data()); )。 出于某种原因,它认为MIMEtypes是文本/纯文本 ! 这可能与您的问题有关。

有一些解决scheme,我发现冲浪一些论坛,你可以修改/扩展类或核心,但他们不适合我 – 对不起。 我相信这是一个Codeigniter核心错误(我认为这个问题已经被EllisLabs打开)。 无论如何,我终于把这个该死的东西硬编码了! 那么,我希望这可以帮助你一些。

基本示例/解决方法,

 //replace with your allowed MIME types if ($_FILES['name_of_form_upload']['type'] != 'image/jpeg' && $_FILES['name_of_form_upload']['type'] != 'image/png' && $_FILES['name_of_form_upload']['type'] != 'image/gif') { $data['message'] = '<div class="message">That file type is not allowed!</div>'; $this->load->view('home_view', $data); } else { //run upload code } 

编辑:格式/语法

你尝试使用MIMEtypes,而不是在$configuration['allowed_types']扩展?

像这样写

 $config["allowed_types"] = "video/x-msvideo|image/jpeg|video/mpeg|video/x-ms-wmv"; 

这实际上是一个核心中的错误..我升级到最新版本的CI和错误消失。

回答在CodeIgniter中上传.doc文件

改变这一点

 'doc' => 'application/msword', 

有了这个在线没有95( application/config/mimes.php文件)

 'doc' => array('application/vnd.ms-word','application/msword'), 

如果你需要简单的方法来解决这个问题,那么有一个简单的解决scheme。 打开“system / libraries / Upload.php”文件

 line no 465 you will see if ( ! $this->is_allowed_filetype()) { $this->set_error('upload_invalid_filetype', 'debug'); return FALSE; } just make it true if ( ! $this->is_allowed_filetype()) { $this->set_error('upload_invalid_filetype', 'debug'); return TRUE; } note : it will stop your all file type validation. 

更改在应用程序\configuration\ Mimes.php