Загружать файлы xls или xlsx с помощью codeigniter, mime-type error

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

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

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

У кого-то была такая же (или аналогичная) проблема и помощь в решении проблемы?

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

РЕДАКТИРОВАТЬ

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

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

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

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

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

и это работает (для этого браузера хотя бы!)

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

Описание:

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

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

Но я понял, что в CodeIgniter Version 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 и загружаете файлы:

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

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

 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

Это было ошибкой 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)

Только для записей, я нашел причину, mime-type отсутствовал в реестре Windows, решил добавить эти ключи с 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" 

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