Загрузите xls или xlsx файлы с codeigniter, ошибка mime-типа - PullRequest
8 голосов
/ 07 февраля 2012

Ну, я считаю, что это не проблема Codeigniter per se , так как это больше mime-type .

Я пытаюсь загрузить файл, файл xls (или xlsx) и mime-тип в браузере, а отчет php: application / octet-stream вместо application / excel , application / vnd.ms-excel или application / msexcel для файла xls. Разумеется, плагин загрузки codeigniter сообщит об ошибке (неверный тип файла) при попытке сопоставить расширение файла с mime-типом.

Странная (est) вещь может заключаться в том, что один и тот же код работал месяцами и теперь перестал работать с последними версиями Chrome (16.0.912.77), Firefox (10.0) и IE9.

Кто-нибудь имел такую ​​же (или похожую) проблему и хотел бы поделиться решением?

Большое спасибо. PS: я не буду предоставлять код, поскольку он не имеет большого значения, но при необходимости я добавлю некоторые фрагменты.

EDIT

Это может быть актуально: ошибка возникает не в тех же браузерах с похожей конфигурацией, а в MS Office вместо Libre Office (на моем компьютере). Этого не происходит в системах Libre Office на базе GNU / Linux. Так что, может быть, Windows сильно играет на пакете с открытым исходным кодом или Libre Office меняет mime-типы просто ради этого?

Ответы [ 4 ]

9 голосов
/ 13 марта 2012

Я тоже получаю эту ошибку.

CI сообщает о типе файла application / zip, который имеет смысл, поскольку формат xlsx является сжатым форматом (переименуйте его в zip, и вы сможете открыть содержимое).

Я добавил / заменил следующую строку в файле MIME-типов (application / config / mimes.php):

'xlsx' => array('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet','application/zip'),

и это работает (по крайней мере, для этого браузера!)

4 голосов
/ 27 августа 2014

Пожалуйста, пройдите через описание и подсказку и легко получите ответ!

Описание:

На самом деле многие рекомендовали добавить / заменить следующую строку в файле (application / config / mimes.php):

'xlsx'  =>  array('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/zip'), 


Но я понял, что в CodeIgniter версии 2.2. * проблема немного другая! Они уже добавили эту строку, но забыли добавить следующий "file_type" ==> 'application / vnd.ms-excel'

'xlsx'  =>  array('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/zip', 'application/vnd.ms-excel'),

Итак, добавив вышеуказанный 'application / vnd.ms-excel' в массив файлов типа xlsx , позвольте мне загрузить файлы .xlsx !

Подсказка:

Всякий раз, когда вы получаете следующую ошибку в CodeIgniter Platform и загрузке файлов:

Тип файла, который вы пытаетесь загрузить, недопустим.

Выполните следующие действия в методе загрузки вашего контроллера,

var_dump($this->upload->data());

И это даст вам огромный массив, который вы можете получить по этой ссылке . (Пожалуйста, смотрите в конце этой страницы). В этом массиве вы можете получить реальный mime_type файла, который вы пытаетесь загрузить, но не даете вам загрузить.

Ответ:

В моем случае мое расширение файла было .xlsx , а тип mime был application / vnd.ms-excel , который не был добавлен в

'xlsx'  =>  array('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/zip'), 

Так что я добавил его вручную, и после этого он работает VERRY WELL !!!

То же самое произошло с загрузкой CSV еще раз, когда я проверил расширение файла .csv , но тип mime был text / plain , когда я добавил его в следующую строку :

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

и сохраняется следующим образом:

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

Работает как шарм! : D Попробуйте, если вы найдете что-то новое в вышеупомянутых шагах, пожалуйста, прокомментируйте здесь !!! Так что, надеясь, что это будет полезно для всего сообщества CodeIgniter, я разместил это, потратив некоторое время!

С наилучшими пожеланиями, ребята,

Randika

2 голосов
/ 11 ноября 2013

Только для записей я нашел причину, в реестре windows отсутствовал тип mime, решил добавить эти ключи с помощью файла .reg:

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"

Но я бы предпочел использовать приведенные выше решения, я не люблю связываться с реестром.

2 голосов
/ 07 февраля 2012

Это была ошибка CI несколько месяцев назад: https://github.com/EllisLab/CodeIgniter/issues/394.mimes.php в рамках был обновлен, и ошибка была устранена.Обновите вашу библиотеку CodeIgniter до версии 2.1.0 (или новее).

Также хорошо бы протестировать / вывести на печать типы mime вашего сервера.

Другой альтернативой является принудительное использование типа mime.С .htaccess это будет

AddType application/excel .xls .xlsx

Для целого приключения по отладке протестируйте различные офисные файлы с get_mime_by_extension($file) с помощью File Helper (http://codeigniter.com/user_guide/helpers/file_helper.html)

...