«Файл не может быть загружен» в Internet Explorer с ASP.NET MVC - PullRequest
6 голосов
/ 08 марта 2012

Итак, я возвращаю FileContentResult от действия, подобного этому:

return File(pck.GetAsByteArray(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "MyExcelFile.xlsx");

При нажатии «Открыть» в IE (я использую IE9, версия 9.0.8112.16421), он говорит «Файл не может быть загружен», и пользователю предоставляется кнопка «Повторить». Если они нажимают «Повторить», это работает нормально. Если они нажимают Сохранить, это работает нормально. В Firefox все работает нормально.

Как разрешить пользователю открывать файл при первом нажатии кнопки «Открыть»?

Ответы [ 4 ]

2 голосов
/ 01 августа 2013

У меня та же проблема, и я не могу предложить хорошее решение (кроме того, что предлагает Туд, который является опцией).Но, глядя на ситуацию с fiddler & co., У меня есть еще кое-какая информация, которая может вам помочь.

Наше приложение создает документы PDF на лету и предлагает их для загрузки.Эта проблема явно зависит от данных. Это означает, что некоторые сгенерированные файлы загружаются нормально с первой попытки, в то время как другим воспроизводимо требуется повторная попытка.

Насколько я могу судить, Fiddler показывает, что ответы сервера идентичны при каждом доступе,Однако запросы различаются (образцы слегка отредактированы):

Первый запрос:

GET http://localhost:12345/Item/PDF/id HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Referer: ...
Accept-Language: ...
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)
Accept-Encoding: gzip, deflate
Host: localhost:12345
Connection: Keep-Alive
Cookie: ASP.NET_SessionId=52znkt1fcisrolj44tnuyzu4

Второй запрос:

GET http://localhost:12345/Item/PDF/id HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)
Host: localhost:12345
Connection: Keep-Alive
Cookie: ASP.NET_SessionId=52znkt1fcisrolj44tnuyzu4

Обратите внимание, как второй запрос уменьшает 'Принять: 'заголовок к */*.Причина, по которой я неохотно добавляю расширение файла к URL-адресу, заключается в том, что предлагаемое имя загрузки создается из данных элемента, отправляется с ответом и в остальном полностью не связано с идентификатором.

2 голосов
/ 14 февраля 2013

Мне удалось «обмануть» IE, сделав правильную вещь, изменив URL.Это отчасти хакерски, но вот деталь.HTH.

Как хороший MVC-кодер, я использовал Url.Action (), чтобы сгенерировать правильную ссылку на мой взгляд на действие контроллера.Результатом было «/ Subscription / DownloadArchive», и у меня возникла та же проблема.(Я передаю ZIP-файл вниз, но он, похоже, ничем не отличается от вашего CSV.) По какой-то причине, прочитав ваше сообщение, я жестко запрограммировал URL-адрес на «/Subscription/DownloadArchive/Archive.zip».Я игнорирую «Archive.zip» в коде, но на самом деле это имя файла, которое я возвращаю из действия моего контроллера.

Presto!

0 голосов
/ 17 августа 2017

это работает ..

Response.Clear();
Response.ClearHeaders();
Response.ClearContent(); 
Server.ScriptTimeout = 3000;
Response.AppendHeader("Content-Disposition:", "attachment; filename=" + fileName);
Response.ContentType = "application/x-msdownload";
excelFile.SaveXls(Response.OutputStream);  
Response.Flush();
HttpContext.Current.ApplicationInstance.CompleteRequest();
// Response.Close();
Response.End();
0 голосов
/ 16 апреля 2013

У меня была такая же проблема, но если я изменил номер порта Visual Studio Development Server на другой, то эта проблема исчезла.

...