2012-02-06 10 views
7

Bene xls o, credo che questo non è un problema Codeigniter per sé in quanto è più di un mime-type.Carica file xlsx con CodeIgniter, mime-tipo di errore

Sto cercando di caricare un file, un xls (o xlsx) file e il mime-type il browser e il rapporto di PHP è application/octet-stream invece di application/excel, application/vnd.ms-excel o application/msexcel per un file xls. Ovviamente il plug-in per il caricamento di code-code segnalerà un errore (tipo di file non valido) mentre cerca di far corrispondere l'estensione del file con il tipo mime.

La cosa strana (est) potrebbe essere che lo stesso codice ha funzionato per mesi e ora ha smesso di funzionare con gli ultimi Chrome (16.0.912.77), Firefox (10.0) e IE9.

Qualcuno ha avuto lo stesso (o simile) problema e cura di condividere la soluzione?

Grazie mille. PS: Non fornirò il codice in quanto non è realmente un codice, ma se necessario caricherò alcuni frammenti.

EDIT

Potrebbe essere rilevante: l'errore non accade con gli stessi browser su una configurazione simile, ma con MS Office, invece di LibreOffice (sul mio pc). Neanche su un sistema Libre Office basato su GNU/Linux. Quindi, potrebbe essere Windows giocare duro sulla suite open source, o Libre Office cambiare i mime-tipi solo per il gusto di farlo?

risposta

9

Anche questo errore mi sta arrivando.

CI sta segnalando un tipo di file 'application/zip' che ha senso in quanto il formato xlsx è un formato compresso (rinominarlo in zip e aprire il contenuto).

ho aggiunto/sostituito la seguente riga al file tipi MIME (application/config/mimes.php):

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

e che funziona (per questo browser, almeno!)

+0

hmmm, potrebbe risolvere il problema, ma permetterebbe ai file .zip che non sono file xlsx di essere caricati, se non erro. –

+0

Sì, l'ho pensato inizialmente, ma CI esegue un controllo dell'estensione del file e del tipo mime, quindi se provi a caricare un file zip, perché l'estensione è zip e non xlsx, genera un errore. Ho anche aggiunto le seguenti righe al file mimes.php per il lavoro che ho svolto: 'slk' => 'text/plain', 'xlsx' => array ('application/vnd.openxmlformats -officedocument.spreadsheetml.sheet ',' application/zip '), ' ods '=>' application/octet-stream – Stevo

+0

che dire di un file zip con estensione xlsx (e non un file xlsx valido)? –

2

Questo era un errore CI qualche mese fa: https://github.com/EllisLab/CodeIgniter/issues/394. mimes.php nel framework è stato aggiornato e il bug è stato risolto. Aggiorna la tua libreria CodeIgniter alla versione 2.1.0 (o successiva).

Inoltre, una buona cosa per test/dump sono i tipi di mime del server.

Un'altra alternativa è forzare il tipo mime. Con .htaccess, che sarebbe

AddType application/excel .xls .xlsx 

Per tutta l'avventura di debug, testare i vari file di lavoro con get_mime_by_extension($file) con l'Helper File (http://codeigniter.com/user_guide/helpers/file_helper.html)

+0

Grazie per la tua risposta. Sfortunatamente sto già usando CI 2.1.0, quindi il problema non può (non dovrebbe) essere quello. Ho provato $ _FILES [$ field] ['tmp_name'] ed era anche "application/octet-stream". La cosa più strana è che succede solo sulla mia macchina. Più tardi ho provato gli stessi browser e SO su un'altra macchina, (l'unica differenza sarebbe Libre Office (sul mio pc) e MS Office sull'altro) e ha funzionato bene. Testato anche su un sistema operativo basato su Linux con Libre Office installato, e ha funzionato bene anche. Proverò l'approccio .htaccess. Grazie. –

+0

Bene. Ho provato l'errore .htaccess. Niente. Probabilmente darò un po 'di riposo a questo problema, dato che l'applicazione è per uso interno per un cliente vicino, e funziona bene per loro. Ad ogni modo, mi piacerebbe trovare la causa di questo problema, in caso contrario, accetterò la tua risposta. Potrebbe aiutare altre persone. –

2

Proprio per i record, ho trovato la causa, mime-type mancava nel registro di Windows, risolto aggiungendo queste chiavi con a.reg file:

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" 

Ma preferirei utilizzare le soluzioni di cui sopra, non mi piace fare casino con il registro.

4

Si prega di consultare la descrizione e il suggerimento seguenti e ottenere facilmente la risposta!

Descrizione:

In realtà, come molti di quelli hanno consigliato di aggiungere/sostituire la seguente riga nel file (application/config/mimes.php):

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


Ma ho capito che in CodeIgniter Versione 2.2. * il problema è un po 'diverso! Hanno aggiunto che la linea già, ma ha dimenticato di aggiungere il seguente "file_type" ==> 'application/vnd.ms-excel'

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

Così l'aggiunta di quanto sopra 'application/vnd.ms-excel' nell'array del tipo di file xlsx, consentitemi di caricare i file .xlsx!

Suggerimento:

Ogni volta che si ottiene il seguente errore, su CodeIgniter piattaforma, e il caricamento dei file:

Il tipo di file che si sta tentando di caricare non è permesso.

fare quanto segue nel metodo di caricamento del controller,

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

E vi darà una vasta gamma, che si può avere un'idea da questo link. (Si prega di vedere la fine di quella pagina) . In quell'array puoi ottenere qual è il vero mime_type del file che stai tentando di caricare ma che non ti sta caricando.

Risposta:

Nel mio caso, la mia estensione del file è stato, .xlsx, e il tipo MIME era application/vnd.ms-excel, che non è stato aggiunto nella

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

Quindi l'ho aggiunto manualmente e dopo questo funziona VERRY BENE !!!

La stessa cosa è accaduta al caricamento di CSV ancora una volta, quando ho controllato l'estensione del file è .csv ma il tipo MIME era text/plain, quando ho aggiunto alla seguente riga:

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

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

Funziona come un fascino! : D Provalo, se trovi qualcosa di nuovo nei passaggi precedenti, per favore commenta qui !!! Quindi, sperando che questo possa essere utile a tutta la comunità di CodeIgniter, l'ho postato per un po 'di tempo!

migliori saluti ragazzi,

Randika

+1

questa è la soluzione migliore. sai perché non ha molti voti positivi. Grazie amico – jayadevkv