web-dev-qa-db-fra.com

Type de contenu de réponse au format CSV

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

Cela ne fonctionne pas:

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

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

Vous devriez également envisager d'ajouter un en-tête Content-Disposition à la réponse. Souvent, un texte/csv sera chargé par un 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 fera apparaître une boîte de dialogue "Enregistrer sous" qui pourrait correspondre à vos attentes.

448
AnthonyWJones

Le type MIME du CSV est text/csv selon RFC 4180 .

126
sastanin

Utilisez text/csv comme type de contenu.

49
ibz

Au fil des ans, j'ai perfectionné pour cela des en-têtes parfaits qui fonctionnent avec brio 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");
46
dangerous

Essayez l'un de ces autres types de mime (à partir d'ici: http://filext.com/file-extension/CSV )

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

En outre, le type mime pourrait être sensible à la casse ...

23
diclophis

Juste utiliser comme ça

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

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

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

J'ai constaté que le problème avec IE est qu'il renifle les données de retour et se décide par quel type de contenu il pense avoir été envoyé. Cela entraîne un certain nombre d'effets secondaires, tels que l'ouverture constante d'une boîte de dialogue saveAs 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');
3
Wookie

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 dialogue Enregistrer sous si vous le souhaitez et Excel comme application par défaut. 100% bien.

Firefox: la boîte de dialogue Enregistrer sous apparaît, mais Firefox n’a aucune idée qu’il s’agit d’un tableur. Suggère de l'ouvrir avec Visual Studio! 50% bon

Chrome: les astuces sont complètement ignorées. Les données CSV sont affichées dans le navigateur. 0% bon.

Bien sûr, dans tous ces cas, je me réfère aux navigateurs lorsqu'ils sortent de leur boîte, sans personnalisation des mappages mime/application.

2
David Sklar

Je suggère d'insérer un caractère '/' devant 'monfichier.cvs'

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

J'espère que vous obtenez de meilleurs résultats.

2
Jaider

Pour C # MVC 4.5, vous devez procéder comme suit:

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