2012-02-06 25 views
7

Bueno, creo que esto no es un problema CodeIgniter per se ya que es más de un tipo MIME .Subir xls o xlsx archivos con error CodeIgniter, tipo MIME

Estoy intentando cargar un archivo, un XLS (o xlsx) del archivo y el tipo MIME del navegador y el informe de PHP es application/octet-stream en lugar de application/sobresalir, application/vnd.ms-excel o application/msexcel para un archivo xls. Por supuesto, el complemento de carga codeigniter informará un error (tipo de archivo no válido) al intentar hacer coincidir la extensión del archivo con el tipo MIME.

Lo más extraño (est) es que el mismo código funcionó durante meses y ahora dejó de funcionar con los últimos Chrome (16.0.912.77), Firefox (10.0) e IE9.

¿Alguien ha tenido el mismo problema (o similar) y se preocupa por compartir la solución?

Muchas gracias. PD: No proporcionaré el código, ya que no es realmente un asunto de código, pero si es necesario, subiré algunos fragmentos.

EDITAR

Podría ser relevante: el error no sucede con los mismos navegadores en una configuración similar, pero con MS Office en lugar de Libre Office (en mi pc). Tampoco ocurre en un sistema + Libre Office basado en GNU/Linux. Entonces, ¿podría ser Windows jugando duro en el paquete de código abierto, o Libre Libre cambiando los tipos de mimo simplemente por el gusto de hacerlo?

Respuesta

9

Recibo este error también.

CI informa un tipo de archivo de 'aplicación/zip' que tiene sentido ya que el formato xlsx es un formato comprimido (cambiarle el nombre a zip y puede abrir los contenidos).

He añadido/sustituyó a la siguiente línea en el fichero de tipos MIME (application/config/mimes.php):

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

y que funciona (para este navegador por lo menos!)

+0

hmmm, podría haber resuelto el problema, pero permitiría cargar archivos .zip que no son archivos xlsx, si no me equivoco. –

+0

Sí, pensé que inicialmente, pero CI realiza una comprobación de la extensión de archivo Y el tipo de mime, por lo que si intenta subir un archivo zip, porque la extensión es zip y no xlsx arroja un error. También agregué las siguientes líneas al archivo mimes.php para el trabajo que he estado haciendo: 'slk' => 'text/plain', 'xlsx' => array ('application/vnd.openxmlformats -officedocument.spreadsheetml.sheet ',' application/zip '), ' ods '=>' application/octet-stream – Stevo

+0

¿qué tal un archivo zip con una extensión xlsx (y no un archivo xlsx válido)? –

2

Esto fue un error de CI hace unos meses: https://github.com/EllisLab/CodeIgniter/issues/394. mimes.php en el marco fue actualizado y el error fue resuelto. Actualice su biblioteca CodeIgniter a 2.1.0 (o más reciente).

También es bueno probar/volcar los tipos de servidor mime.

Otra alternativa es forzar el tipo de mimo. Con .htaccess, eso sería

AddType application/excel .xls .xlsx 

Para una aventura depuración conjunto, probar varios archivos de oficina con get_mime_by_extension($file) con el Asistente de Archivos (http://codeigniter.com/user_guide/helpers/file_helper.html)

+0

Gracias por su respuesta. Desafortunadamente, ya estoy usando CI 2.1.0, por lo que el problema no puede (no debería) ser eso. Probé $ _FILES [$ field] ['tmp_name'] y también fue "application/octet-stream". Lo más extraño es que solo sucede en mi máquina. Más tarde probé en los mismos navegadores y sistema operativo en otra máquina (la única diferencia sería Libre Office (en mi pc) y MS Office en el otro) y funcionó bien. También probado en un sistema operativo basado en Linux con Libre Office instalado, y funcionó muy bien también. Voy a probar el enfoque .htaccess. Gracias. –

+0

Bueno. Probé el enfoque .htaccess. Nada. Probablemente le daría descanso a este tema, ya que la aplicación es para uso interno de un cliente cercano, y está funcionando bien para ellos. De todos modos, me encantaría encontrar la causa de este problema, si no, aceptaré tu respuesta. Puede ayudar a otras personas. –

2

Justo para los registros, encontré la causa, faltaba el tipo MIME en el registro de Windows, resolví agregar estas claves con a.archivo 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" 

Pero preferiría utilizar las soluciones anteriores, no me gusta meterme con el registro.

4

Por favor, revisa la siguiente descripción y la pista y obtén la respuesta fácilmente.

Descripción:

En realidad tantas otras han aconsejado añadir/reemplazar la siguiente línea en el archivo (application/config/mimes.php):

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


Pero tengo se dio cuenta de que en CodeIgniter Versión 2.2. * ¡el problema es un poco diferente! Han añadido que la línea ya, pero se olvidó de añadir el siguiente "file_type" ==> 'application/vnd.ms-excel'

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

por lo que añadir lo anterior 'application/vnd.ms-excel' en la matriz de xlsx tipo de archivo, déjame cargar los archivos .xlsx!

Consejo:

Siempre que reciba el siguiente error, en la plataforma CodeIgniter, y la carga de archivos:

no se permite que el tipo de archivo que está intentando cargar.

Haga lo siguiente en su método de carga del controlador,

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

Y se le dará una enorme variedad que se puede obtener una idea de esta link. (Por favor, consulte el final de esa página) . En ese conjunto, puede obtener el tipo de archivo mime real del archivo que está intentando cargar, pero que no le permite cargarlo.

Respuesta:

En mi caso, mi extensión de archivo era, .xlsx, y el tipo mime era application/vnd.ms-excel, que no fue añadido a la

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

Así que lo agregué manualmente, y después de eso funciona VERRY WELL !!!

Lo mismo sucedió al cargar CSV una vez más, cuando revisé la extensión del archivo es .csv pero el tipo mime fue text/plain, cuando he añadido a la línea siguiente:

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

y guardado de la siguiente manera,

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

Funciona como un encanto! : D Pruébalo, si encuentras algo nuevo dentro de los pasos anteriores, por favor comenta aquí !!! Entonces, esperando que esto sea útil para toda la comunidad de CodeIgniter, ¡lo publiqué tomando algo de tiempo!

mejores individuos Regards,

Randika

+1

esta es la mejor solución. No lo haga saber por qué no tiene muchos votos positivos. Gracias, hombre – jayadevkv

Cuestiones relacionadas