Come usare il tipo MIME CSV?


125

In un'applicazione Web a cui sto lavorando, l'utente può fare clic su un collegamento a un file CSV. Non è stata impostata alcuna intestazione per il tipo mime, quindi il browser lo rende semplicemente come testo. Vorrei che questo file fosse inviato come file .csv, in modo che l'utente potesse aprirlo direttamente con calc, excel, gnumeric, ecc.

header('Content-Type: text/csv');
echo "cell 1, cell 2";

Questo codice funziona come previsto sul mio computer (non è sempre così?) Ma non funziona su un altro computer.

Il mio browser è una build notturna di FF 3.0.1 (su Linux). I browser in cui non funzionava erano IE 7 e FF 3.0 (su Windows)

Ci sono delle stranezze di cui non sono a conoscenza?

Risposte:


219

Puoi provare a forzare il browser ad aprire una finestra di dialogo "Salva con nome ..." facendo qualcosa del tipo:

header('Content-type: text/csv');
header('Content-disposition: attachment;filename=MyVerySpecial.csv');
echo "cell 1, cell 2";

Che dovrebbe funzionare sulla maggior parte dei principali browser.


12

Non si specifica una lingua o un framework, ma la seguente intestazione viene utilizzata per i download di file:

"Content-Disposition: attachment; filename=abc.csv"

5

Con Internet Explorer devi spesso specificare Pragma: anche l'intestazione pubblica affinché il download funzioni correttamente.

header('Pragma: public');

Solo i miei 2 centesimi ..


5
Pragma: pubblico non ha alcun significato per Internet Explorer. (Ho lavorato sul componente in questione e ho eliminato la fonte).
EricLaw,

Forse l'utilità reale di questo è sostituire un Pragma preesistente: intestazione no-cache?
Doin,

2

Questo codice può essere utilizzato per esportare qualsiasi file, incluso CSV

// application/octet-stream tells the browser not to try to interpret the file
header('Content-type: application/octet-stream');
header('Content-Length: ' . filesize($data));
header('Content-Disposition: attachment; filename="export.csv"');

2
"octetstream" è pensato per essere "octet-stream"
EricLaw,

2
Ciò può causare un avviso in alcuni browser: Risorsa interpretata come Documento ma trasferita con tipo MIME application / octet-stream
mikeschuld
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.