Мені потрібно надіслати файл 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");
Спробуйте один із цих інших типів mime (звідси: 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
.
В ASP.net MVC ви можете використовувати a FileContentResult
і File
метод:
public FileContentResult DownloadManifest() {
byte[] csvData = getCsvData();
return File(csvData, "text/csv", "filename.csv");
}
Я виявив, що проблема з IE полягає в тому, що він нюхає повернуті дані та вирішує питання про те, який тип контенту він вважає надісланим. Це викликає ряд побічних ефектів, таких як завжди відкриття діалогового вікна збереження для текстових файлів, оскільки ви використовуєте стиснення даних trasnferes. Рішення полягає в (в PHP-коді) ......
header('X-Content-Type-Options: nosniff');
Встановлення типу вмісту та розміщення вмісту, як описано вище, дає результати, які різко змінюються в різних браузерах:
IE8: Діалогове вікно SaveAs за бажанням та Excel як додаток за замовчуванням. 100% добре.
Firefox: діалогове вікно SaveAs відображається, але Firefox не має уявлення, що це електронна таблиця. Пропонує відкрити його за допомогою Visual Studio! 50% добре
Chrome: підказки повністю ігноруються. Дані CSV відображаються у браузері. 0% добре
Звичайно, у всіх цих випадках я маю на увазі веб-переглядачі, коли вони виходять із вікна, без налаштування відображення mime / map.
Для 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.