Tipo de conteúdo de resposta como CSV

Eu preciso enviar um arquivo CSV em resposta HTTP. Como posso definir a resposta de saída como formato CSV?

Isto não está a funcionar:

Response.ContentType = "application/CSV"; 

Usar text/csv é o tipo mais apropriado.

Você também deve considerar adicionar um header Content-Disposition à resposta. Muitas vezes, um texto / csv será carregado por um Internet Explorer diretamente em uma instância hospedada do Excel. Isso pode ou não ser um resultado desejável.

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

O texto acima fará com que apareça o diálogo “Salvar como”, que pode ser o que você pretende.

O tipo MIME do CSV é text / csv de acordo com o RFC 4180 .

Use text/csv como o tipo de conteúdo.

Ao longo dos anos, tenho aperfeiçoado um conjunto perfeito de headers para isso que funcionam de forma shiny em todos os navegadores que eu conheço

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

Experimente um desses outros tipos de mime (daqui: http://filext.com/file-extension/CSV )

  • valores separados por texto / vírgula
  • texto / csv
  • aplicação / csv
  • aplicativo / excel
  • aplicativo / vnd.ms-excel
  • aplicação / vnd.msexcel

Além disso, o tipo MIME pode ser sensível a maiúsculas …

Apenas use assim

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

No asp.net MVC, você pode usar um FileContentResult e o método File :

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

Definir o tipo de conteúdo e a disposição do conteúdo, conforme descrito acima, produz resultados altamente variables ​​com diferentes navegadores:

IE8: checkbox de diálogo SaveAs conforme desejado e Excel como o aplicativo padrão. 100% bom.

A checkbox de diálogo do Firefox: SaveAs aparece, mas o Firefox não faz ideia de que é uma planilha. Sugere abri-lo com o Visual Studio! 50% bom

Chrome: as dicas são totalmente ignoradas. Os dados CSV são mostrados no navegador. 0% bom.

É claro que em todos esses casos eu estou me referindo aos navegadores conforme eles saem da checkbox, sem customização dos mapeamentos mime / application.

Sugiro inserir um caractere ‘/’ na frente de ‘myfilename.cvs’

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

Espero que você obtenha melhores resultados.

Descobri que o problema com o IE é que ele detecta os dados de retorno e toma sua própria opinião sobre qual tipo de conteúdo ele acha que foi enviado. Há vários efeitos colaterais que isso causa, como sempre abrir uma checkbox de diálogo Salvar como para arquivos de texto porque você está usando compactação de transmissões de dados. A solução é (em código php) ……

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

Para C # MVC 4.5 você precisa fazer assim:

 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.