Well, i believe this is not a Codeigniter problem per se as it is more of a mime-type.
I\'m trying to upload a file, a xls (or xlsx) file a
I'm getting this error also.
CI is reporting a file type of 'application/zip' which makes sense as the xlsx format is a compressed format (rename it to zip and you can open the contents).
I have added/replaced the following line to the mime types file (application/config/mimes.php):
'xlsx' => array('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet','application/zip'),
and that works (for this browser at least!)
Just for the records, I found the cause, mime-type was missing on the windows registry, solved adding these keys with a .reg file:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Classes\.xls]
"Content Type"="application/excel"
[HKEY_CURRENT_USER\Software\Classes\.xlsx]
"Content Type"="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
But would rather use the solutions above, I don't like to mess with the registry.
Please, go through the following Description and the hint and get the Answer easily!
Description:
Actually as many ones have advised to add/replace the following line in the file (application/config/mimes.php):
'xlsx' => array('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/zip'),
But I have realized that in CodeIgniter Version 2.2.* the issue is little bit different!
They have added that line already, but forgot to add the following "file_type" ==> 'application/vnd.ms-excel'
'xlsx' => array('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/zip', 'application/vnd.ms-excel'),
So adding the above 'application/vnd.ms-excel' into the array of xlsx file type, let me upload the .xlsx files!
Hint:
Whenever you get the following error, on CodeIgniter Platform, and uploading files:
The filetype you are attempting to upload is not allowed.
Do the following in your Controller's upload method,
var_dump($this->upload->data());
And it will give you a huge array which you can get an idea from this link.(Please, see the end of that page). In that array you can get what's the real mime_type of the file you are trying to upload but not giving you to upload.
Answer:
In my case, my file extension was, .xlsx , and the mime type was application/vnd.ms-excel , which was not added into the
'xlsx' => array('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/zip'),
So I added it manually, and after that it works VERRY WELL!!!
Same thing happened to uploading CSV once again, when I checked the file extension is .csv but the mime type was text/plain, when I added it to the following line:
'csv' => array('text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'application/x-csv', 'text/x-csv', 'text/csv', 'application/csv', 'application/excel', 'application/vnd.msexcel');
and saved as follows,
'csv' => array('text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'application/x-csv', 'text/x-csv', 'text/csv', 'application/csv', 'application/excel', 'application/vnd.msexcel', 'text/plain'),
It works like a charm! :D Try it, if you find something new within the above steps, please comment here!!! So, hoping this will be helpful to all of the CodeIgniter community, I posted it taking some time!
Best Regards guys,
Randika
This was a CI bug a few months ago: https://github.com/EllisLab/CodeIgniter/issues/394 . mimes.php in the framework was updated and the bug was resolved. Update your CodeIgniter library to 2.1.0 (or newer).
Also a good thing to test/dump are your server mime types.
Another alternative is forcing the mime type. With .htaccess, that would be
AddType application/excel .xls .xlsx
For a whole debugging adventure, test various office files with get_mime_by_extension($file)
with the File Helper (http://codeigniter.com/user_guide/helpers/file_helper.html)