Мне нужно отправить файл CSV в ответ HTTP. Как я могу установить выходной отклик в формате CSV?
Это не работает:
Response.ContentType = "application/CSV";
Мне нужно отправить файл CSV в ответ HTTP. Как я могу установить выходной отклик в формате CSV?
Это не работает:
Response.ContentType = "application/CSV";
Ответы:
Использование text/csv
является наиболее подходящим типом.
Вы также должны рассмотреть возможность добавления Content-Disposition
заголовка к ответу. Часто текст / CSV будет загружен Internet Explorer непосредственно в размещенный экземпляр Excel. Это может или не может быть желательным результатом.
Response.AddHeader("Content-Disposition", "attachment;filename=myfilename.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");
Попробуйте один из этих других типов пантомимы (отсюда: http://filext.com/file-extension/CSV )
Кроме того, MIME-тип может быть чувствительным к регистру ...
Просто используйте так
Response.Clear();
Response.ContentType = "application/CSV";
Response.AddHeader("content-disposition", "attachment; filename=\"" + filename + ".csv\"");
Response.Write(t.ToString());
Response.End();
return new EmptyResult()
чтобы получить имя файла для прикрепления. В противном случае IE попытается сохранить файл как ActionName.htm
.
Я обнаружил, что проблема с IE заключается в том, что он перехватывает возвращаемые данные и сам решает, какой тип контента он считает отправленным. Это вызывает ряд побочных эффектов, таких как постоянное открытие диалогового окна saveAs для текстовых файлов, поскольку вы используете сжатие данных. Решение (в PHP-код) ......
header('X-Content-Type-Options: nosniff');
Установка типа контента и расположения контента, как описано выше, дает сильно отличающиеся результаты в разных браузерах:
IE8: диалог SaveAs по желанию и Excel в качестве приложения по умолчанию. 100% хорошо.
Firefox: диалог SaveAs действительно появляется, но Firefox не знает, что это электронная таблица. Предлагает открыть его с помощью Visual Studio! 50% хорошо
Хром: подсказки полностью игнорируются. Данные CSV отображаются в браузере. 0% хорошо.
Конечно, во всех этих случаях я имею в виду браузеры, которые выходят из коробки, без настройки отображений mime / приложения.
Для 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.