[Solved] CodeIgniter: “The filetype you are attempting to upload is not allowed.”

I’m experiencing a very odd upload problem. Here’s the relevant view file:

<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>

And here’s my temp controller’s upload() method:

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());
    }
}

When I upload an AVI video, everything works fine. When I upload, say, a WMV video, I get the following var dumps:

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:wamptmpphp2333.tmp' (length=23)
      'error' => int 0
      'size' => int 83914

The “wmv” extension is being interpreted as the MIME type: video/x-ms-wmv. This should be fine since my config/mimes.php has the following:

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

It’s a similar situation when I try uploading other files. So far, the only one that seems to work is my test AVI video.

Any ideas what might be wrong?

UPDATE 1:

One my machine, only AVI uploads. On another developer’s machine, no files upload. On yet another developer’s machine, all supported files upload. Are these browser or server issues?

Solution #1:

You are using Firefox, aren’t you?

You could try looking at system/libraries/Upload.php line 199:

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

Change that line to:

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

Then do upload your .wmv file. It would show something like application/octet-stream or whatever. Add that to your mimes.php. Hope this help =)

Similar answer here

Some links:

Solution #2:

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

Respondent: Rocco

Solution #3:

  1. Upload your .wmv file to the server using FTP/SFTP/scp/etc where you run the CodeIgniter application
  2. On the server where you have uploaded the .wmv file, execute the following PHP code

    <?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. Save the code as mime.php

  4. Run in the terminal – $ php mime.php
  5. If it dumps any other value than you already have for wmv, append that value into wmv mime types.

Also check PHP_VERSION in other development machines. finfo_open is introduced in PHP 5.3. The development machine where upload is working may have an older version of PHP or it may have right mime type for the wmv.

Respondent: Kanchi

Solution #4:

did you try using mime types instead of extensions in $config[‘allowed_types’]?

write it like this

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

Solution #5:

Answer for to Upload .doc file in CodeIgniter

Change this

'doc'   =>  'application/msword',

With this on line no 95 (application/config/mimes.php file)

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

Solution #6:

I’ve recently had some very similar problems with the Codeigniter’s Upload Class.

The *allowed_types* doesn’t seem to be working. For example, I wanted to allow .PNG images to be uploaded, but it wouldn’t allow them through it’s filter. I ended up investigating it further. I allowed all file types to be temporarily uploaded, I uploaded a .PNG, and then dumped the upload data ($this->upload->data());). For some reason, it thought the MIME type was text/plain! This might be related to your problem.

There are some solutions to this I found surfing some forums where you can modify/extend the class or core, but they didn’t work for me — sorry. I believe it’s a Codeigniter Core bug (I think the issue has already been opened with EllisLabs). I ended up hard-coding the damn thing anyways! Well, I hope this helps you some.

Basic example/work-around,

//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
}

Edit: Formatting/Grammar

Respondent: Anil

Solution #7:

Check your mimes.php file in application/config. It should return an array of mime types e.g return $mimes; at end of file or return array(..... in start of mimes array.

Respondent: envysea

Solution #8:

This is actually a bug in the core.. I upgraded to latest version of CI and the bug disappeared.

Solution #9:

if you need the simple way to solve this,there is an easy solution for it.
open “system/libraries/Upload.php” file

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.
Respondent: thedjaney

Solution #10:

Change IN applicationconfigMimes.php

Respondent: Abhishek

The answers/resolutions are collected from stackoverflow, are licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0 .

Leave a Reply

Your email address will not be published.