CodeIgniter:"不允许您尝试上传的文件类型."

Sta*_*bie 26 php codeigniter mime-types codeigniter-2

我遇到了一个非常奇怪的上传问题.这是相关的视图文件:

<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>
Run Code Online (Sandbox Code Playgroud)

这是我的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());
    }
}
Run Code Online (Sandbox Code Playgroud)

当我上传AVI视频时,一切正常.当我上传一个WMV视频时,我得到以下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
Run Code Online (Sandbox Code Playgroud)

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

'wmv' =>  array('video/x-ms-wmv', 'audio/x-ms-wmv')
Run Code Online (Sandbox Code Playgroud)

当我尝试上传其他文件时,情况类似.到目前为止,唯一似乎有效的是我的测试AVI视频.

什么想法可能是错的?

更新1:

一台我的机器,只有AVI上传.在另一个开发人员的机器上,没有文件上传.在另一个开发人员的计算机上,所有支持的文件都会上传.这些浏览器或服务器问题?

Roc*_*cco 52

你使用的是Firefox,不是吗?

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

$this->_file_mime_type($_FILES[$field]);
Run Code Online (Sandbox Code Playgroud)

将该行更改为:

$this->_file_mime_type($_FILES[$field]); var_dump($this->file_type); die();
Run Code Online (Sandbox Code Playgroud)

然后上传你的.wmv文件.它会表现出类似的application/octet-stream东西.把它添加到你的mimes.php.希望这个帮助=)

类似的答案在这里

一些链接:


小智 5

$ config ["allowed_types"] ="*";