Antwort Inhaltstyp als CSV

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

Das funktioniert nicht:

Response.ContentType = "application/CSV"; 

   

Die Verwendung von text/csv ist der am besten geeignete Typ.

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

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

Der obige Befehl bewirkt, dass eine Datei “Speichern unter” angezeigt wird, die möglicherweise Ihren Vorstellungen entspricht.

Der MIME-Typ der CSV ist text / csv nach RFC 4180 .

Verwenden Sie text/csv als Inhaltstyp.

Im Laufe der Jahre habe ich eine perfekte Sammlung von Headern dafür erstellt, die in allen Browsern, die ich kenne, hervorragend funktionieren

 // 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"); 

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

  • Text / Komma-getrennte Werte
  • Text / CSV
  • Anwendung / CSV
  • Anwendung / Excel
  • Anwendung / vnd.ms-Excel
  • Anwendung / vnd.msexcel

Auch der MIME-Typ kann Groß- und Kleinschreibung beachten …

Verwenden Sie einfach so

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

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

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

Das Festlegen des Inhaltstyps und der Inhaltsdisposition, wie oben beschrieben, führt zu sehr unterschiedlichen Ergebnissen bei verschiedenen Browsern:

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

Firefox: SaveAs-Dialog wird angezeigt, aber Firefox hat keine Ahnung, dass es eine Tabelle ist. 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 verweise ich in all diesen Fällen auf die Browser, die aus der Box kommen, ohne die Mime- / Anwendungszuordnungen anzupassen.

Ich schlage vor, ein ‘/’ Zeichen vor ‘myfilename.cvs’ einzufügen

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

Ich hoffe, du bekommst bessere Ergebnisse.

Ich habe festgestellt, dass das Problem mit dem Internet Explorer ist, dass es die Rückgabedaten schnüffelt und sich selbst überlegt, welchen Inhaltstyp es für den Versand hält. Es gibt eine Reihe von Nebeneffekten, die dies verursachen, wie zum Beispiel das Öffnen eines saveAs-Dialogs für Textdateien, da Sie die Komprimierung von Datenübertragungen verwenden. Die Lösung ist (in PHP-Code) ……

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

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.