Загрузка файла через 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 ();
и теперь он работает как шарм под всеми браузерами