2011-01-19 18 views
16

¿Alguien más ha tenido problemas para cargar un archivo csv en Codeigniter? Me está poniendo bastante molesto "No está permitido el tipo de archivo que intentas cargar". error, a pesar de que he establecido explícitamente el tipo de carga. Aquí está mi código (debe ser cosas bastante estándar):Carga de un csv en Codeigniter

function doUpload() { 

    $config['upload_path'] = 'uploads/'; 
    $config['allowed_types'] = 'text/plain|text/csv|csv'; 
    $config['max_size'] = '5000'; 
    $config['file_name'] = 'upload' . time(); 

    $this->load->library('upload', $config); 

    if(!$this->upload->do_upload()) echo $this->upload->display_errors(); 
    else { 
     $file_info = $this->upload->data(); 
     $csvfilepath = "uploads/" . $file_info['file_name']; 
     $this->addfromcsv($csvfilepath); 

    } 

} 

Me trataron de cubrir todas las bases en mis tipos permitidos - tal vez echaba de menos uno? ¡Gracias por cualquier ayuda con esto!

+3

El ** ** allowed_types deben ser '$ config [ 'allowed_types'] = 'csv';' y en ** config/mimos. php ** debe agregar 'text/plain' en la tecla ** csv **. Así es como lo hice. – machineaddict

Respuesta

12

Desgraciadamente no hay ninguna especificación oficial, por lo que hay un buen montón de ellos: el más popular entre los que faltan son,

text/comma-separated-values|application/csv|application/excel|application/vnd.ms-excel|application/vnd.msexcel|text/anytext 

Es muy poco probable que va a coincidir otra.

+0

Gracias, pero no funcionó después de todo. Parece tan estúpido que no hay forma de configurarlo para permitir todos los tipos de archivos. Al menos durante el desarrollo, incluso si no quieren permitirlo en producción. – StormShadow

+0

@StormShadow: en realidad hay una forma, al extender la clase de carga. Aquí está el código, lo usé en el pasado y funciona. http://codeigniter.com/forums/viewthread/123663/#757848 Por cierto, es posible que simplemente desee verificar el tipo de mime particular de su archivo y agregarlo en su lugar. – cbrandolino

+0

¿Puedo encontrar el tipo mime de un archivo de forma no programática? – StormShadow

5

Tuve el mismo problema al cargar archivos .csv. Lo resolví determinando el tipo de mimo usando file -I file.csv en el terminal OS X. Informó que el tipo de mime era 'text/plain', así que lo agregué al archivo config/mimes.php.

+0

Gracias. Esto funcionó para mí. – Sergio

30

Lo puse en funcionamiento añadiendo los mimetipos sugeridos de cbrandolino a config/mimes.php (gran consejo jljohnstone). Por lo que la propiedad de mis csv $ mimos se parece a esto ahora:

'csv' => array('application/vnd.ms-excel', 'text/anytext', 'text/plain', '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') 
+2

Muy útil. Me pregunto por qué el CI oficial no incluyó esto. Gracias. – elf1984

+0

Funcionó para mí también. Hay una lista de tipos mime CSV en el archivo '/ appication/config/mime.php', pero no es tan extensa como la publicada por Jos. –

+0

Me faltaban dos de la lista, ¡después de agregarlos consiguió que el mío funcionara! – Drewdin

3

- CodeIgniter 2.2.0 -

hice una depuración rápida en la bibliotecaSubir y tengo descubrió que a veces el mismo código fuente que se ejecuta en diferentes servidores identificará el mismo archivo CSV que tenga un tipo de archivo diferente (es decir, Servidor 1 identifique el archivo CSV como: application/vnd.ms-excel pero Servidor 2 identifique el mismo archivo CSV como: text/x-c).

Mi solución era agregar, en application/config/mimes.php, el tipo de archivo que identifica el servidor donde estaba el problema. Por lo tanto, mi matriz csv del archivo mimes.php se ve así: 'csv' => array('application/vnd.ms-excel', 'text/anytext', 'text/plain', '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/x-c').

+0

Gracias. Buena solución. – Florin

0

He intentado muchas cosas para subir el archivo CSV en CodeIgniter: -

I Añadir tipo MIME (application/vnd.ms-excel) a archivo de tipo mime pero el problema es media CodeIgniter sólo aceptará nombre de archivo userfile. si configura el nombre de archivo userfile, entonces funciona.

Creo que podría haber otra manera pero no puedo encontrar eso.

0

por primera vez en tipos permitidos simplemente 'CSV'

$config['allowed_types'] = 'csv'; 
$this->load->library('upload', $config); 

segundo ir a/config/mimos.php y cambiar el elemento de matriz 'csv' como sigue:

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