Тип ответа в виде CSV

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

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

Response.ContentType = "application/CSV";

Ответ 1

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

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

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

Приведенное выше приведет к появлению диалогового окна "Сохранить как", которое может быть тем, что вы намерены.

Ответ 2

MIME-тип CSV - это текст /csv в соответствии с RFC 4180.

Ответ 3

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

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

Ответ 4

В качестве типа содержимого используйте text/csv.

Ответ 5

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

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

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

Ответ 6

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

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

Ответ 7

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

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

Ответ 8

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

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

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

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

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

Ответ 9

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

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

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

Ответ 10

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

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