На нашем веб-сайте ASP.NET мы разработали страницу aspx, которая позволяет пользователю загружать файл. Путь к файлу отправляется в качестве параметра, а затем содержимое файла читается и записывается в поток ответов. Код, который мы использовали, следующий:
string filepath = HttpContext.Current.Request.Params["FilePath"];
Response.Clear();
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=" + Path.GetFileName(filepath));
Response.TransmitFile(filepath);
Response.Flush();
В нашей среде разработки все работает как положено, но когда мы используем этот фрагмент кода на нашем производственном сервере, мы заметили, что при попытке загрузить практически все виды файлов в браузере ничего не происходит. Он просто открывает новое окно для этой страницы aspx, но затем закрывается почти сразу. Это очень странно, поскольку мы безуспешно пытались загрузить файлы .pdf, .doc, .xls, .txt и изображения, за исключением некоторых (не всех) файлов .msg.
Мы искали подсказку, отслеживающую HTTP-трафик, достигающий браузера с помощью Fiddler, но мы не увидели ничего странного. Во всех случаях содержимое файла отправляется в браузер без каких-либо различий, поэтому кажется, что это браузер не показывает диалог открытия / сохранения / отмены.
Вот пример заголовков, полученных в браузере с ошибочным файлом:
HTTP / 1.1 200 OK Proxy-Connection:
Keep-Alive Connection: Keep-Alive
Длина контента: 421395 Через: 1.1
IBISA01 Дата: среда, 26 января 2011
12:02:54 GMT Тип контента:
Сервер приложений / октет-потока:
Microsoft-IIS / 7.5 Cache-Control:
Частный Контент-Диспозиция:
вложение; имя файла = P08-0656 Interflex
Especificación Inteface SGA ERP
Версия 0.1.pdf X-AspNet-Версия:
4.0.30319 X-Powered-By: ASP.NET
И это заголовки файла, который можно загрузить:
HTTP / 1.1 200 OK Proxy-Connection:
Keep-Alive Connection: Keep-Alive
Длина контента: 290816 Через: 1.1
IBISA01 Дата: среда, 26 января 2011
12:03:29 GMT Тип контента:
Сервер приложений / октет-потока:
Microsoft-IIS / 7.5 Cache-Control:
Частный Контент-Диспозиция:
вложение; имя файла = окончание Acalaracion
Fichero ASCII ПРОВЕДОРЫ
Interflex.msg X-AspNet-версия:
4.0.30319 X-Powered-By: ASP.NET
Во всех случаях полное содержимое файла появляется после заголовков без видимых проблем, связанных с кодированием.
Нам интересно, есть ли какая-нибудь возможность отладки или отслеживания активности Internet Explorer, чтобы понять, почему отказывается загружать файлы.
Веб-сервер имеет Windows Server 2008 R2 и IIS 7.5. Мы используем браузеры IE 8.0 поверх Windows 7.
Большое спасибо заранее.
Хосе Антонио Арроба