Type de contenu de réponse au format CSV

Je dois envoyer un fichier CSV dans la réponse HTTP. Comment puis-je définir la réponse en sortie au format CSV?

Cela ne fonctionne pas:

Response.ContentType = "application/CSV"; 

Utiliser text/csv est le type le plus approprié.

Vous devriez également envisager d’append un en Content-Disposition tête Content-Disposition à la réponse. Souvent, un text / csv sera chargé par Internet Explorer directement dans une instance hébergée d’Excel. Cela peut ou peut ne pas être un résultat souhaitable.

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

Ce qui précède entraînera l’apparition d’une boîte de dialog “Enregistrer sous”, qui peut correspondre à ce que vous souhaitez.

Le type MIME du fichier CSV est text / csv conformément à la RFC 4180 .

Utilisez text/csv comme type de contenu.

Au fil des ans, j’ai peaufiné un jeu d’en-têtes parfait qui fonctionne parfaitement dans tous les navigateurs que je connais.

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

Essayez l’un de ces autres types MIME (ici: http://filext.com/file-extension/CSV )

  • valeurs séparées par du texte / des virgules
  • texte / csv
  • application / csv
  • application / excel
  • application / vnd.ms-excel
  • application / vnd.msexcel

De plus, le type MIME peut être sensible à la casse …

Juste utiliser comme ça

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

Dans ASP.net MVC, vous pouvez utiliser une FileContentResult et la méthode File :

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

La définition du type de contenu et de la disposition du contenu comme décrit ci-dessus produit des résultats extrêmement variables avec différents navigateurs:

IE8: boîte de dialog Enregistrer sous comme vous le souhaitez et Excel comme application par défaut. 100% bon

Firefox: le dialog SaveAs apparaît, mais Firefox n’a aucune idée qu’il s’agit d’une feuille de calcul. Suggère de l’ouvrir avec Visual Studio! 50% bien

Chrome: les indices sont totalement ignorés. Les données CSV sont affichées dans le navigateur. 0% bien.

Bien sûr, dans tous ces cas, je fais référence aux navigateurs tels qu’ils sortent de leur boîte, sans aucune personnalisation des mappages mime / application.

Je suggère d’insérer un caractère ‘/’ devant ‘myfilename.cvs’

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

J’espère que vous obtiendrez de meilleurs résultats.

J’ai constaté que le problème avec IE est qu’il renifle les données de retour et se fait une idée du type de contenu qu’il pense avoir été envoyé. Il en résulte un certain nombre d’effets secondaires, tels que l’ouverture d’une boîte de dialog de sauvegarde pour les fichiers texte, car vous utilisez la compression des transferts de données. La solution est (en code php) ……

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

Pour C # MVC 4.5, vous devez faire comme ceci:

 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.