Диалоговое окно загрузки файла IE7 исчезает
-
05-07-2019 - |
Вопрос
Следующий код не будет корректно выполняться в IE7 с установленными последними пакетами обновления.
System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
response.Clear();
response.AddHeader("Content-Disposition", "attachment;filename=Contacts.xls");
response.ContentType = "application/octet-stream";
System.Text.UnicodeEncoding Encoding = new System.Text.UnicodeEncoding();
byte[] unicodeBytes = {255,254};
int length = 2 + Encoding.GetByteCount(_exportContent); // _exportContent is string.
response.AddHeader("Content-Length", length.ToString());
response.OutputStream.Write(unicodeBytes, 0, 2);
unicodeBytes = Encoding.GetBytes(_exportContent);
response.OutputStream.Write(unicodeBytes, 2, unicodeBytes.Length);
response.End();
Я открываю страницу aspx с помощью js (window.open()) и выполняю приведенный выше код в Page_Load().
Странная вещь заключается в том, что всплывающее окно пытается загрузить / показать диалоговое окно файла, а затем вы слышите звук, похожий на то, что всплывающее окно заблокировано (хотя блокировщик всплывающих окон деактивирован!).
Дополнительная информация:
- Такое поведение происходит как на XP, так и на W2k3 (который является реальным веб-сервером без чего-либо еще установленного, кроме IE7 и FW 3.5 SP1 и последних пакетов обновления.)
- Тот же код отлично работает с FW 2.0
- У Firefox нет проблем с отображением диалогового окна файла.
Мне было бы любопытно, сталкивался ли кто-нибудь еще с такой же проблемой и мог бы предложить решение для того, чтобы заставить эту штуку работать в IE7.
Ваше здоровье,
Dimi
Решение
Добавьте заголовок, сообщающий IE явно чтобы КЭШИРОВАТЬ файл.IE имеет известные ошибки, связанные с невозможностью правильного сохранения файла, если он отправляется как файл без кэша.
Другие советы
У меня была такая же проблема, и я провел час в крайнем расстройстве.Как обычно, причиной всех головных болей являются браузеры Microsoft IE.В других браузерах все работало нормально.Решение простое:Пользователю нужно будет настроить настройку IE7, перейдя в "Инструменты"> "Свойства обозревателя"> Вкладка "Безопасность" > Для "Интернет" и / или "Локальная интрасеть" измените параметры безопасности, нажав кнопку "Пользовательский уровень ..."
Перейдите на узел "Загрузки"> Автоматическое запрашивание загрузки файлов"> установите флажок "Включить"
Это исправило ситуацию для моих пользователей.
Надеюсь, это поможет.
Была эта проблема в нашей интрасети, автоматическое запрашивание загрузок у меня не работало (уже было выбрано), но это сработало...
Инструменты -> Свойства обозревателя
На вкладке Безопасность выберите ‘Локальная интрасеть’, затем нажмите Сайты
Нажмите Дополнительно
Введите “http://your.url.com” и нажмите Добавить
Нажмите Закрыть -> Ок -> Ok
надеюсь, это сработает и для вас тоже ;)
Я все еще не могу заставить диалоговое окно не исчезать.Это происходит, когда приложение обращается к [вебметоду] для сбора информации для передачи на страницу, которая пытается загрузить результаты в Excel.
Response.Clear();
Response.ClearHeaders();
Response.ClearContent();
Response.Charset = "";
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("Content-Disposition", "attachment; filename=\"" + fileNameToUse + "\"");
Response.CacheControl = "Public";
Response.Write(output);
Response.Flush();
Response.Close();
Похоже, это также происходит только при доступе к веб-сайту с использованием IP-адреса (999.11.1.111\default.aspx....).Это работает при доступе к нему через loacalhost\default.aspx
Чтобы проверить, не является ли безопасность причиной этой проблемы, установите для целевого параметра значение _self.Должна появиться панель предупреждения в верхней части IE.Если причина в этом, проверьте безопасность IE.В частности, приглашение к загрузке части.