Bankzilla
Bankzilla

Reputation: 2096

CodeIgniter Upload class PDF filetype not allowed

Works locally but on the two servers I've tried the same error message is shown. Using Codeigniter 2.1.3

private function upload_file(){
    $config['upload_path'] = './uploads/';
    $config['allowed_types'] = 'jpg|png|jpeg|gif|pdf';
    $config['max_width']  = '0';
    $config['max_height']  = '0';
    $config['encrypt_name']  = true;
    $this->load->library('upload', $config);
    var_dump($_FILES);
    if ( ! $this->upload->do_upload()){
        $error = array('error' => $this->upload->display_errors());
        var_dump($error);
        die();
        return $error;
    } else {
        $data = array('upload_data' => $this->upload->data());
        var_dump($data);
        die();
        return $data;
    }
}

While doing the var_dump($_FILES); it shows the correct information array(1) { ["userfile"]=> array(5) { ["name"]=> string(8) "0002.pdf" ["type"]=> string(14) "aplication/pdf" ["tmp_name"]=> string(27) "C:\Windows\Temp\php9454.tmp" ["error"]=> int(0) ["size"]=> int(29295) } }

var_dump($error) giving off array(1) { ["error"]=> string(64) " The filetype you are attempting to upload is not allowed. " }

Tested with both a png and jpg and these works marvelously.

The correct mime-types are in the config file config/mimes.php

 'pdf'  =>  array('application/pdf', 'application/x-download'),

Edit: If it means anything, the local server is a MAC and the two remotes are windows.

Upvotes: 3

Views: 10775

Answers (3)

Abaij
Abaij

Reputation: 873

Instead of

$this->load->library('upload',$config);

Try this

$this->load->library('upload'); $this->upload->initialize($config);

This works for me

Upvotes: 0

sh.e.salh
sh.e.salh

Reputation: 529

I got the same issue here for some reason I can't upload pdf files a quick troublshooting was to display errors

$msg = $this->upload->display_errors('<p>', '</p>');
echo $msg;

I got the error message of invalid file type , so I added anew line of code to display full information about the file to uploaded.

$msg = $this->upload->display_errors('<p>', '</p>');
$msg.=print_r($this->upload->data());
echo $msg;

then I copy the file type to config/mime.php

'pdf'   =>  array('application/pdf'),

and make sure that the same mime type is used as the mime type of my uploaded file. The funny part was that the error was that in mime.php there was a typo :)

apostrophe instead of single quote as a result of copy past from internet without paying attention to quotation marks used.

Upvotes: 0

Bankzilla
Bankzilla

Reputation: 2096

So even though the code is all correct the error is actually on PHP itself. There's a spelling mistake in there mime-types. When var_dump($_FILES) it spitting out ["type"]=> string(14) "aplication/pdf" Note that "application" is spelt wrong.

Checked on workmates machine and his correct, so might be an issue with php >5.3.5

Upvotes: 2

Related Questions