it-swarm.com.de

Antwortinhaltstyp als CSV

Ich muss eine CSV-Datei in HTTP-Antwort senden. Wie kann ich die Ausgabeantwort als CSV-Format einstellen?

Das funktioniert nicht:

Response.ContentType = "application/CSV";
296
balaweblog

text/csv ist der am besten geeignete Typ.

Sie sollten auch in Betracht ziehen, der Antwort einen Content-Disposition-Header hinzuzufügen. Häufig wird ein Text/csv von einem Internet Explorer direkt in eine gehostete Instanz von Excel geladen. Dies kann ein wünschenswertes Ergebnis sein oder nicht.

Response.AddHeader("Content-Disposition", "attachment;filename=myfilename.csv");

Daraufhin wird ein Dialogfeld "Speichern unter" angezeigt, das möglicherweise Ihren Wünschen entspricht.

448
AnthonyWJones

Der MIME-Typ des CSV ist text/csv gemäß RFC 4180 .

126
sastanin

Verwenden Sie text/csv als Inhaltstyp.

49
ibz

Im Laufe der Jahre habe ich einen perfekten Satz von Kopfzeilen entwickelt, der in allen mir bekannten Browsern hervorragend funktioniert

// these headers avoid IE problems when using https:
// see http://support.Microsoft.com/kb/812935
header("Cache-Control: must-revalidate");
header("Pragma: must-revalidate");

header("Content-type: application/vnd.ms-Excel");
header("Content-disposition: attachment; filename=$filename.csv");
46
dangerous

Probieren Sie einen dieser anderen Mime-Typen (von hier: http://filext.com/file-extension/CSV )

  • text/durch Kommas getrennte Werte
  • text/csv
  • anwendung/CSV
  • anwendung/Excel
  • anwendung/vnd.ms-Excel
  • anwendung/vnd.msexcel

Auch der Mime-Typ eventuell muss die Groß- und Kleinschreibung berücksichtigen ...

23
diclophis

Verwenden Sie einfach so

Response.Clear();
Response.ContentType = "application/CSV";
Response.AddHeader("content-disposition", "attachment; filename=\"" + filename + ".csv\"");
Response.Write(t.ToString());
Response.End();
15
VINKAS India

In ASP.net-MVC können Sie eine FileContentResult- und die File-Methode verwenden:

public FileContentResult DownloadManifest() {
    byte[] csvData = getCsvData();
    return File(csvData, "text/csv", "filename.csv");
}
5
Rob Church

Ich habe festgestellt, dass das Problem mit IE darin besteht, dass die zurückgegebenen Daten erfasst werden und sich selbst darüber entscheiden, von welchem ​​Inhaltstyp sie gesendet wurde. Es gibt eine Reihe von Nebeneffekten, die dadurch verursacht werden, z. B. das Öffnen eines SaveAs-Dialogfelds für Textdateien, da Sie die Komprimierung von Datentransfer verwenden. Die Lösung ist (in PHP-Code) ......

header('X-Content-Type-Options: nosniff');
3
Wookie

Wenn Sie den Inhaltstyp und die Anordnung der Inhalte wie oben beschrieben einstellen, werden mit unterschiedlichen Browsern stark unterschiedliche Ergebnisse erzielt:

IE8: SaveAs-Dialog wie gewünscht und Excel als Standard-App. 100% gut.

Firefox: Der SaveAs-Dialog wird angezeigt, aber Firefox hat keine Ahnung, dass es sich um eine Tabelle handelt. Schlägt vor, es mit Visual Studio zu öffnen! 50% gut

Chrome: Die Hinweise werden vollständig ignoriert. Die CSV-Daten werden im Browser angezeigt. 0% gut.

Natürlich beziehe ich mich in all diesen Fällen auf die Browser, wenn sie aus ihrer Box kommen, ohne dass die Mime-/Anwendungszuordnungen angepasst werden müssen.

2
David Sklar

Ich schlage vor, ein '/' Zeichen vor 'meinDateiname.cvs' einzufügen.

Response.AddHeader("Content-Disposition", "attachment;filename=/myfilename.csv");

Ich hoffe du bekommst bessere Ergebnisse.

2
Jaider

Für C # MVC 4.5 müssen Sie Folgendes tun:

Response.Clear();
Response.ContentType = "application/CSV";
Response.AddHeader("content-disposition", "attachment; filename=\"" + fileName + ".csv\"");
Response.Write(dataNeedToPrint);
Response.End();
return new EmptyResult();  //this line is important else it will not work.
0
Suresh Kamrushi