Ну, я считаю, что это не проблема 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"
Но предпочел бы использовать вышеприведенные решения, мне не нравится возиться с реестром.