9
votes

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 and the mime-type the browser and the php report is application/octet-stream instead of application/excel, application/vnd.ms-excel or application/msexcel for a xls file. Of course codeigniter upload plugin will report an error (invalid file type) as it tries to match the file extension with the mime-type.

The weird(est) thing might be that the same code worked for months and now stopped working with the latest Chrome (16.0.912.77), Firefox (10.0) and IE9.

Has anyone had the same (or similar) problem and care to share the solution?

Thank you very much. PS: I won't provide code as it's not really a code matter, but if necessary i'll upload some snippets.

EDIT

It might be relevant: the error doesn't happen with same browsers on a similar configuration, but with MS Office instead of Libre Office (on my pc). It doesn't happen on a GNU/Linux based + Libre Office system either. SO, could it be Windows playin' hard on the open source suite, or the Libre Office changing the mime-types just for the heck of it?

4

4 Answers

9
votes

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

4
votes

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'), 

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

2
votes

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)

2
votes

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.