MIME-тип для Excel XML (ASP.NET 3.5)

Я использую 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: я нашел описание ошибки здесь

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


person UNeverNo    schedule 17.11.2011    source источник


Ответы (3)


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

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

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

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

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

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

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

person Prasanth    schedule 17.11.2011
comment
Я знаю эти MIME-типы, но ни один из них не соответствует моим требованиям (файл excel-xml с расширением .xml). - person UNeverNo; 17.11.2011
comment
См. Отредактированную часть ответа, которая является решением вашей проблемы. - person Prasanth; 17.11.2011
comment
Я добавил вложение к своим тестам, теперь мой клиент хочет открыть его с помощью моего стандартного xml-приложения (не может быть больше нигде) после нажатия кнопки «Открыть» открывается в Excel (но только в IE). Если я сделаю это в FF, он все равно преобразуется в .xml.xls - person UNeverNo; 17.11.2011
comment
@UNeverNo См. Последнюю часть ссылки: если файл не относится к правильному типу MIME, пользователь может увидеть вторую подсказку и, следовательно, должен снова нажать «Нет», чтобы отменить вторую попытку открытия. Эта проблема возникает только при использовании IE для вашего веб-браузера. Эта проблема все еще исследуется, но исправление вряд ли возможно до появления Office 14, учитывая характер сложности кода и тот факт, что Excel не хочет снижать меру безопасности для обходного поведения открытого IE без полного понимания последствия для других пользователей браузера. :) - person Prasanth; 17.11.2011
comment
Спасибо за вашу помощь, я думаю, что пока буду жить с предупреждением ... - person UNeverNo; 17.11.2011

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

Response.ContentType = "text/xml";

Не указывайте контент-диспозицию.

Эта техника отлично работает с Handler, а не с WebForm.

person Franky    schedule 03.07.2013

Предупреждение системы безопасности НЕ относится к типу 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 в приведенном выше коде.

person Yahia    schedule 17.11.2011
comment
Если я не ошибаюсь, сгенерированный формат файла - это не Excel 2007, а формат XML, представленный в Excel 2003. Таким образом, расширение файла .xlsx неверно, и Excel, вероятно, даже не откроет его с этим расширением файла. - person Codo; 17.11.2011
comment
@Codo спасибо - IIRC, на который вы ссылаетесь, был введен в Excel 2000 - соответственно отредактировал ответ ... - person Yahia; 17.11.2011
comment
Я также пробовал .xls в качестве расширения, но затем получаю ту же ошибку (я пытаюсь открыть .xls, но это расширение отличается от содержимого [это xml]) @Codo: Да, это то, что я написал в своем первоначальном посте (по крайней мере, Я пытался ;-)) - person UNeverNo; 17.11.2011