Тип содержимого ответа как CSV

Мне нужно отправить CSV-файл в HTTP-ответе. Как установить выходной ответ в формате CSV?

Это не работает:

Response.ContentType = "application/CSV";

11 ответов


используя text/csv является наиболее подходящим типом.

вы также должны рассмотреть возможность добавления Content-Disposition заголовок ответа. Часто текст / csv загружается Internet Explorer непосредственно в размещенный экземпляр Excel. Это может быть или не быть желательным результатом.

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

выше вызовет Файл" Сохранить как " диалоговое окно, которое может быть то, что вы намерены.


MIME тип CSV является текст / csv по данным RFC 4180.


использовать text/csv как тип контента.


на протяжении многих лет я оттачивал идеальный набор заголовков для этого, которые блестяще работают во всех браузерах, которые я знаю

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

попробуйте один из этих других типов mime (отсюда:http://filext.com/file-extension/CSV)

  • текст/разделенных запятыми значений
  • текст / csv
  • приложение / csv
  • приложение / excel
  • приложения/донгов.в MS-Excel с
  • application / vnd.msexcel

кроме того, mime-тип может чувствительно к регистру...


просто используйте так

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

In ASP.net MVC, вы можете использовать FileContentResult и File способ:

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

установка типа контента и диспозиции контента, как описано выше, приводит к дико различным результатам с различными браузерами:

IE8: диалог SaveAs по желанию и Excel в качестве приложения по умолчанию. 100% хорошо.

Firefox: диалоговое окно SaveAs появляется, но Firefox понятия не имеет, что это электронная таблица. Предлагает открыть его с помощью Visual Studio! 50% хорошо

Chrome: подсказки полностью игнорируются. Данные CSV отображаются в браузере. Ноль% хороший.

конечно, во всех этих случаях я имею в виду браузеры, как они выходят из коробки, без настройки сопоставления mime/приложений.


Я предлагаю вставить символ " / "перед" myfilename.cvs'

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

Я надеюсь, что вы получите лучшие результаты.


Я обнаружил, что проблема с IE заключается в том, что он нюхает возвращаемые данные и принимает собственное решение о том, какой тип контента он думает, что он был отправлен. Существует ряд побочных эффектов, которые это вызывает, например, всегда открытие диалогового окна saveAs для текстовых файлов, поскольку вы используете сжатие данных trasnferes. Решение (в php-коде)......

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

для C# MVC 4.5 вам нужно сделать следующее:

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.