У меня есть страница asp.net, которая отправляет содержимое файла клиенту, поэтому браузер показывает диалоговое окно «Сохранить как» для загрузки файла. Эта страница отображается во всплывающем окне, и когда пользователь нажимает кнопку сохранения, она автоматически закрывается и начинается загрузка.
На сервере Windows 2003 все работает нормально. На Vista с другими браузерами тоже работает нормально. Но когда я пытаюсь использовать IE7 и Vista, всплывающее окно открывается и закрывается примерно через секунду без отображения диалогового окна загрузки файла. Как я могу это решить?
Код, который я использую для генерации ответа:
FileStream fileStream = new FileStream(filePath, FileMode.Open);
int fileSize = (int)fileStream.Length;
byte[] buffer = new byte[fileSize];
fileStream.Read(buffer, 0, (int)fileSize);
fileStream.Close();
Response.Clear();
Response.Buffer = true;
Response.BufferOutput = true;
Response.ContentType = "application / octet - stream";
Response.AddHeader("Content-Length", buffer.Length.ToString());
Response.AddHeader("Content-Disposition", "attachment; filename = " + filename);
Response.AddHeader("Extension", Path.GetExtension(filename));
Response.ContentEncoding = System.Text.Encoding.GetEncoding("windows-1254");
Response.BinaryWrite(buffer);
Response.Flush();
Response.End();
И я открываю всплывающее окно с этим javascript:
window.open ('Download.aspx?filename=somefile.ext','downloadWindow','location=0,status=0,scrollbars=0,width=1,height=1');
Обновлено: Я исправил пробелы, но, к сожалению, проблема не в них.
Обновлено еще раз:: Похоже, эта проблема связана не с Vista, а только с IE. Я также обнаружил, что он отлично работает, когда проект запускается на сервере разработки локально, но при работе с подключением к серверу публикации он не может загрузить файл.
Привет, @Serhat -> как ты это решил? У меня такая же проблема. Спасибо.





Попробуйте удалить пробелы в ContentType. Стандарт - application/octet-stream.
Я не могу указать на конкретную проблему в вашем коде (за исключением, возможно, этого типа контента, который выглядит плохо сформированным; не уверен, имеет ли это значение). Вот код, который я использую для этого, который работает как в IE7, так и в Firefox:
Response.ContentType = "application/x-download";
Response.AddHeader("Content-Disposition", "attachment; filename = " + fileName);
Response.CacheControl = "public";
Response.OutputStream.Write(byteArr, 0, byteArr.Length);
Response.End();
Две вещи.
Я также предлагаю вам добавить кавычки вокруг имени файла, иначе, если он содержит пробелы, он будет усечен в Firefox.
Я думаю, ваша проблема может быть в IIS 7. Проблема с "addHeader" в новом информационном Интернет-сервере в режиме конвейера интеграции.
Попробуйте использовать Response.AppendHeader.
У меня тоже была такая же проблема ... и я использовал это решение (я использую его на button.click):
Response.ContentType = "text/txt";
Response.AppendHeader("Content-Disposition", "attachment; filename = "+DownloadFileName);
Response.Write(MyFileContent_Text_);
Response.End();
... это просто сработало !!
Я наткнулся на этот пост, потому что у меня была похожая проблема, если не та же. Я использую IE8 в Windows 7.
При отладке на моем локальном компьютере я мог получить запрос на загрузку файла, но при нажатии кнопки «Сохранить» или «Открыть» окно хода загрузки отображалось примерно на полсекунды, а затем внезапно закрывалось, ничего не загружая.
У меня установлена надстройка для Internet Explorer под названием IE7Pro. Он поставляется с менеджером загрузки, который я включил. Когда я отключил его, мои проблемы исчезли, и я мог открывать или сохранять свои файлы.
Надеюсь, это окажется полезным для кого-то еще.
Если он работает в IE на другом компьютере, это не проблема IE.