2012-02-06 3 views
7

Ну, я считаю, что это не проблема Codeigniter сама по себе как это больше мим типа.Загрузить XLS или XLSX файлы с CodeIgniter, мим-типа ошибки

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

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

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

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

EDIT

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

ответ

9

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

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

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

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

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

+0

hmmm, это могло решить проблему, но это позволило бы .zip-файлы, которые не были бы загружены файлами xlsx, если я не ошибаюсь. –

+0

Да, я думал, что изначально, но CI проверяет расширение файла и тип mime, поэтому, если вы попытаетесь загрузить zip-файл, потому что расширение является zip, а не xlsx, оно вызывает ошибку. Я также добавил следующие строки в файл mimes.php для работы, которую я делал: 'slk' => 'text/plain', 'xlsx' => array ('application/vnd.openxmlformats -officedocument.spreadsheetml.sheet ',' application/zip '), ' ods '=>' application/octet-stream – Stevo

+0

Что такое zip-файл с расширением xlsx (а не действительный файл xlsx)? –

2

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

Также хорошая вещь для проверки/сброса - это типы сервера mime сервера.

Другая альтернатива - это принудительный тип мим. С .htaccess, который был бы

AddType application/excel .xls .xlsx 

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

+0

Спасибо за ваш ответ. К сожалению, я уже использую CI 2.1.0, поэтому проблема не может (не должна) быть таковой. Я тестировал $ _FILES [$ field] ['tmp_name'], а также был «application/octet-stream». Самое странное, что это происходит только на моей машине. Позже я тестировал в одних и тех же браузерах и ОС на другой машине (единственная разница была бы с Libre Office (на моем компьютере) и MS Office - с другой), и она работала нормально. Также был протестирован в ОС на базе Linux с установленным Libre Office, и он тоже хорошо работал. Я попробую apache .htaccess. Спасибо вам. –

+0

Ну. Пробовал .htaccess aproach. Ничего. Я, вероятно, расскажу об этой проблеме, поскольку приложение предназначено для внутреннего использования для закрытого клиента, и оно работает нормально для них. Во всяком случае, я хотел бы найти причину этой проблемы, если нет, я приму свой ответ. Это может помочь другим людям. –

2

Просто для записей я нашел причину, 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" 

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

4

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

Описание:

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

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


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

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

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

Подсказка:

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

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

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

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

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

Ответ:

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

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

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

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

'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

+1

это лучшее решение. знайте, почему у него нет много авансов. – jayadevkv

Смежные вопросы