Wie verwende ich den CSV MIME-Typ?

125

In einer Webanwendung, an der ich arbeite, kann der Benutzer auf einen Link zu einer CSV-Datei klicken. Für den MIME-Typ ist kein Header festgelegt, daher rendert der Browser ihn nur als Text. Ich möchte, dass diese Datei als CSV-Datei gesendet wird, damit der Benutzer sie direkt mit calc, excel, gnumeric usw. öffnen kann.

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

Dieser Code funktioniert wie erwartet auf meinem Computer (ist das nicht immer so?), Funktioniert aber nicht auf einem anderen Computer.

Mein Browser ist ein nächtlicher Build von FF 3.0.1 (unter Linux). Die Browser, in denen es nicht funktionierte, waren IE 7 und FF 3.0 (unter Windows)

Gibt es irgendwelche Macken, die ich nicht kenne?

Tadeck
quelle

Antworten:

219

Sie können versuchen, den Browser zu zwingen, ein Dialogfeld "Speichern unter ..." zu öffnen, indem Sie Folgendes tun:

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

Welches sollte in den meisten gängigen Browsern funktionieren.

Sean Bright
quelle
12

Sie geben keine Sprache oder kein Framework an, aber der folgende Header wird zum Herunterladen von Dateien verwendet:

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

In Internet Explorer müssen Sie häufig auch den öffentlichen Header Pragma: public angeben, damit der Download ordnungsgemäß funktioniert.

header('Pragma: public');

Nur meine 2 Cent ..

4 Ebenen
quelle
5
Pragma: public hat für Internet Explorer keinerlei Bedeutung. (Ich habe an der fraglichen Komponente gearbeitet und die Quelle erfasst).
EricLaw
Möglicherweise besteht der eigentliche Nutzen davon darin, einen bereits vorhandenen Pragma-No-Cache-Header zu ersetzen?
Doin
2

Mit diesem Code können Sie jede Datei exportieren, einschließlich 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"');
Juri Korolow
quelle
2
"octetstream" soll "octet-stream" sein
EricLaw
2
Dies kann in einigen Browsern zu einer Warnung führen: Ressource als Dokument interpretiert, aber mit Anwendung / Oktett-Stream vom Typ MIME übertragen
mikeschuld