2011-01-19 2 views
16

Qualcun altro ha avuto problemi nel caricare un file csv in Codeigniter? Sto diventando abbastanza fastidioso "Il tipo di file che stai tentando di caricare non è consentito." errore, anche se ho impostato in modo esplicito il tipo di caricamento. Ecco il mio codice (dovrebbe essere roba abbastanza standard):Caricamento di un csv in 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); 

    } 

} 

ho cercato di coprire tutte le basi nei miei tipi consentiti - forse ho perso uno? Grazie per l'aiuto con questo!

+3

La ** ** allowed_types dovrebbero essere '$ config [ 'allowed_types'] = 'CSV';' e in ** config/mimi. php ** dovresti aggiungere 'text/plain' in ** csv ** key. Questo è come l'ho fatto. – machineaddict

risposta

12

Purtroppo non v'è alcuna specifica ufficiale, quindi non c'è un bel po 'di loro: il più popolare tra quelli che mancano sono,

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

E' altamente improbabile che possiate incontrare un altro.

+0

Grazie, ma dopotutto non ha funzionato. Sembra così stupido che non c'è un modo per impostarlo per consentire tutti i tipi di file. Almeno durante lo sviluppo, anche se non vogliono permetterlo in produzione. – StormShadow

+0

@StormShadow: In realtà c'è un modo, estendendo la classe di upload. Ecco il codice, l'ho usato in passato e funziona. http://codeigniter.com/forums/viewthread/123663/#757848 BTW, potresti semplicemente voler controllare il particolare tipo mime del tuo file e aggiungerlo. – cbrandolino

+0

Posso trovare il tipo mime di un file non a livello di programmazione? – StormShadow

5

Ho avuto lo stesso problema nel caricare file .csv. Ho risolto il problema determinando il tipo di mime usando file -I file.csv nel terminale OS X. Ha riferito che il tipo mime era "text/plain", quindi l'ho aggiunto al file config/mimes.php.

+0

Grazie. Questo ha funzionato per me. – Sergio

30

Ho funzionato aggiungendo i mimetipi suggeriti da cbrandolino a config/mimes.php (ottimo suggerimento jljohnstone). Così la proprietà csv dei miei $ mimi assomiglia a questo ora:

'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

Molto utile. Mi chiedo perché l'IC ufficiale non abbia incluso questo. Grazie. – elf1984

+0

Ha funzionato anche per me. C'è un elenco di tipi di mime CSV nel file '/ appication/config/mime.php', ma non è esteso come quello pubblicato da Jos. –

+0

Mi mancavano due dalla lista, dopo averli aggiunti ha funzionato! – Drewdin

3

- Codeigniter 2.2.0 -

ho fatto un rapido debug sul Carica biblioteca e devo scoperto che a volte lo stesso codice sorgente in esecuzione su server diversi identifica lo stesso file CSV con un diverso tipo di file (ad esempio Server 1 identifica il file CSV come: application/vnd.ms-excel ma Server 2 identifica lo stesso file CSV come: text/x-c).

La mia correzione è stata quella di aggiungere, in application/config/mimes.php, il tipo di file identificato dal server in cui si è verificato il problema. Quindi, il mio array csv dal file mimes.php assomiglia a: '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

Grazie. Buona soluzione – Florin

0

Ho provato molte cose per caricare file CSV in CodeIgniter: -

aggiungo tipo MIME (application/vnd.ms-excel) a file di tipo MIME ma la questione media è CodeIgniter accetterà solo il nome del file file utente. se imposterai il nome del file userfile allora funzionerà.

Penso che potrebbe esserci un altro modo ma non riesco a trovarlo.

0

prima in tipi consentiti solo digitare 'CSV'

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

secondo andare a/config/mimi.php e cambiare l'elemento dell'array 'CSV' come segue:

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