MIME-тип для Excel XML (ASP.NET 3.5) - PullRequest
7 голосов
/ 17 ноября 2011

Я использую CarlosAG-Dll, которая создает для меня XML-Excel-файл (внутри MemoryStream).

Response.ContentType = "application/vnd.ms-excel";
Response.AppendHeader("content-disposition", "myfile.xml");
memory.WriteTo(Response.OutputStream);

Моя проблема в том, что я получаю на стороне клиента myfile.xls (IE) или myfile.xml.xls (FF) и, следовательно, получают досадное предупреждение о безопасности от excel.

Я также пробовал это сделать с application / vnd.openxmlformats-officedocument.spreadsheetml.sheet (xlsx), но затемдаже не открывается.

Так что мне нужно либо вырезать .xml и отправить его как vnd.ms-excel (как?), либо взять другой MIME-тип (но какой?).


edit: я нашел описание ошибки здесь

Интересно, это все еще открыто и почему?

Ответы [ 3 ]

7 голосов
/ 17 ноября 2011

Используйте вот так

Response.ContentType = "application/vnd.ms-excel";

Response.AppendHeader("content-disposition", "attachment; filename=myfile.xls");

Для Excel 2007 и выше тип MIME отличается

Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";

Response.AppendHeader("content-disposition", "attachment; filename=myfile.xlsx");

См. Список типов MIME

Файл Office 2007Формат MIME Типы

РЕДАКТИРОВАТЬ:

Если содержимое не является собственным форматом файла Excel, а является текстовым форматом (например,CSV, TXT, XML), затем веб-сайт может добавить следующий HTTP-заголовок в свой ответ GET, чтобы указать IE использовать альтернативное имя, и в имени вы можете установить расширение для правильного типа контента:

Response.AddHeader "Content-Disposition", "Attachment;Filename=myfile.csv"

Подробнее см. по этой ссылке

1 голос
/ 03 июля 2013

Если ваш документ является документом Excel Xml 2003, вы должны использовать тип содержимого text / xml.

Response.ContentType = "text/xml";

Не указывать расположение содержимого.

Этот метод отлично работает сОбработчик, не с WebForm.

0 голосов
/ 17 ноября 2011

Предупреждение о безопасности НЕ относится к типу MIME - это настройка безопасности на стороне клиента, которую нельзя отключить со стороны сервера!

Еще один момент - изменить Response.AppendHeader("content-disposition", "myfile.xml"); на:

Response.AppendHeader("content-disposition", "attachment; filename=myfile.xlsx");

OR

Response.AppendHeader("content-disposition", "inline; filename=myfile.xlsx");

Для справки см http://www.ietf.org/rfc/rfc2183.txt

РЕДАКТИРОВАТЬ - согласно комментарию:

Если формат не XLSX (Excel 2007 и выше), используйте myfile.xls в приведенном выше коде.

...