Загрузка файла через https в IE8 с использованием ASP.NET

Я пытаюсь сделать так, чтобы пользователь мог загрузить электронную таблицу Excel с нашего сайта, используя кнопку, которая перенаправляет через это:

Response.Redirect(string.Format("../excel/ExcelForm.aspx?pathName=&fileNameDisplay={0}&fileNameUnique={1}", "spreadsheet.xls", fileName));

Страница aspx просто отправляет обратно файл через объект Response, например так:

 Response.ContentType = "application/vnd.ms-excel";
 Response.AddHeader("Content-Disposition", "attachment; filename=" + fileNameDisplay);
 Response.WriteFile(Server.MapPath(pathName + fileNameUnique));
 Response.Flush();
 Response.End();

Все отлично работает на моей машине, но когда мы помещаем его на сервер, https в сочетании с настройками без кэширования выдает нам сообщение о том, что "Internet Explorer не может загрузить [blahblahblah]". Настройки кеша на странице с кнопкой Excel:

HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);
HttpContext.Current.Response.ExpiresAbsolute = DateTime.Now.AddDays(-1);
HttpContext.Current.Response.Expires = 0;
HttpContext.Current.Response.AddHeader("Pragma", "no-cache");
HttpContext.Current.Response.AddHeader("cache-control", "private, no-cache, must-revalidate no-store pre-check=0 post-check=0 max-stale=0");
HttpContext.Current.Response.Cache.SetNoServerCaching();

Когда я удаляю эти строки, все работает просто отлично. Однако я не могу удалить их по другим причинам. Поэтому я попытался добавить следующую строку в ExcelForm.aspx как раз перед тем, как добавить что-то в заголовок:

Response.ClearHeaders();

Что просто дает мне "Internet Explorer не может загрузить ExcelForm.aspx с [url]". И вот где я застрял. Предложения?

3 ответа

Решение

У меня недавно была похожая проблема при экспорте файлов CSV из метода контроллера MVC. Я обнаружил, что добавление:

      Response.ClearHeaders();
      Response.Clear();

Решил проблему для меня в IE

Надеюсь это поможет!

Я также столкнулся с той же проблемой,

Когда я его погуглил, то обнаружил, что в заголовке ответа есть настройки "без чаше", т.е. следующий код является причиной проблемы.

Response.AppendHeader("Pragma", "no-cache") 
Response.AppendHeader("Cache-Control", "no-cache") 
Response.AppendHeader("max-age", "0") 

В некоторых блогах говорится, что для решения этой проблемы вы должны внести некоторые изменения в реестр Windows на веб-сервере и на всех клиентских компьютерах (:O), поэтому невозможно выполнить настройки реестра на каждом клиентском компьютере.

Основной причиной является отсутствие кэширования в заголовке ответа, поэтому я просто добавил

Response.ClearHeaders() 

перед добавлением контента для загрузки в заголовок ответа. Код, как показано ниже,

Response.ClearHeaders() 
Response.ContentType = "application/ms-excel" 
Response.AppendHeader("content-disposition", "attachment; filename=""" + fileName + """") 
Response.BinaryWrite(fileBytes) 
Response.End() 

Это исправило проблему.

Наслаждаться!!!

У меня была точно такая же проблема, я не смог загрузить двоичный поток через IE8

Согласно информации на этой странице, мой новый код выглядит так

  • Response.ClearHeaders ();
  • Response.ContentType = "application / octet-stream";
  • Response.AppendHeader ("content-disposition", string.Format ("attachment; filename = {0}", "nameofthefile.exe"));
  • Response.BinaryWrite (байт);
  • Response.End ();

и теперь он работает как шарм под всеми браузерами

Другие вопросы по тегам