Тип содержимого ответа как CSV - PullRequest
305 голосов
/ 26 декабря 2008

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

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

Response.ContentType = "application/CSV";

Ответы [ 11 ]

459 голосов
/ 26 декабря 2008

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

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

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

Приведенное выше приведёт к появлению диалогового окна «Сохранить как», которое может соответствовать вашим намерениям.

131 голосов
/ 16 марта 2009

MIME-тип CSV: text / csv в соответствии с RFC 4180 .

52 голосов
/ 26 декабря 2008

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

46 голосов
/ 12 ноября 2009

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

// 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");
23 голосов
/ 26 декабря 2008

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

  • Текст / разделенный запятыми-значение
  • текст / CSV
  • применение / CSV
  • Приложение / Excel
  • применение / vnd.ms-Excel
  • применение / vnd.msexcel

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

15 голосов
/ 28 апреля 2009

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

Response.Clear();
Response.ContentType = "application/CSV";
Response.AddHeader("content-disposition", "attachment; filename=\"" + filename + ".csv\"");
Response.Write(t.ToString());
Response.End();
5 голосов
/ 25 июля 2013

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

public FileContentResult DownloadManifest() {
    byte[] csvData = getCsvData();
    return File(csvData, "text/csv", "filename.csv");
}
3 голосов
/ 16 февраля 2012

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

header('X-Content-Type-Options: nosniff');
2 голосов
/ 14 июня 2011

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

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

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

2 голосов
/ 28 апреля 2009

Установка типа контента и расположения контента, как описано выше, дает сильно отличающиеся результаты в разных браузерах:

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...