Tipo de contenido de respuesta como CSV

Necesito enviar un archivo CSV en respuesta HTTP. ¿Cómo puedo configurar la respuesta de salida como formato CSV?

Esto no está funcionando:

Response.ContentType = "application/CSV"; 

Usar text/csv es el tipo más apropiado.

También debería considerar agregar un encabezado de Content-Disposition a la respuesta. A menudo, un Internet / csv será cargado por un Internet Explorer directamente en una instancia alojada de Excel. Esto puede o no ser un resultado deseable.

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

Lo anterior causará que aparezca un cuadro de diálogo “Guardar como” que puede ser lo que usted desea.

El tipo MIME del CSV es text / csv según RFC 4180 .

Use text/csv como el tipo de contenido.

A lo largo de los años, he estado perfeccionando un conjunto perfecto de encabezados para esto que funcionan shinymente en todos los navegadores que conozco

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

Pruebe uno de estos otros mime-types (desde aquí: http://filext.com/file-extension/CSV )

  • texto / valores separados por comas
  • texto / csv
  • aplicación / csv
  • aplicación / excel
  • application / vnd.ms-excel
  • application / vnd.msexcel

Además, el tipo de mimo podría ser sensible a mayúsculas y minúsculas …

Simplemente usa eso

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

En ASP.net MVC, puede usar FileContentResult y el método File :

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

Establecer el tipo de contenido y la disposición del contenido como se describe anteriormente produce resultados muy variables con diferentes navegadores:

IE8: cuadro de diálogo Guardar como, y Excel como la aplicación predeterminada. 100% bueno

Firefox: aparece el cuadro de diálogo Guardar como, pero Firefox no tiene idea de que se trata de una hoja de cálculo. ¡Sugiere abrirlo con Visual Studio! 50% bueno

Chrome: las sugerencias se ignoran por completo. Los datos CSV se muestran en el navegador. 0% bueno.

Por supuesto, en todos estos casos me refiero a los navegadores a medida que salen de su caja, sin personalizar las asignaciones de mimo / aplicación.

Sugiero insertar un carácter ‘/’ delante de ‘myfilename.cvs’

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

Espero que obtengas mejores resultados.

He descubierto que el problema con IE es que olfatea los datos de retorno y toma una decisión sobre qué tipo de contenido cree que se envió. Hay una serie de efectos colaterales que esto ocasiona, como abrir siempre un cuadro de diálogo guardar como para archivos de texto porque está utilizando la compresión de trasnferidos de datos. La solución es (en código php) ……

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

Para C # MVC 4.5, debe hacer esto:

 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.