Загрузка файла не работает с IE7

У меня есть страница 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. Я также обнаружил, что он отлично работает, когда проект запускается на сервере разработки локально, но при работе с подключением к серверу публикации он не может загрузить файл.

Если он работает в IE на другом компьютере, это не проблема IE.

inspite 24.07.2009 11:54

Привет, @Serhat -> как ты это решил? У меня такая же проблема. Спасибо.

kevin 11.09.2012 12:56
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
2
7 710
7

Ответы 7

Попробуйте удалить пробелы в 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();

Две вещи.

  1. Как упоминалось ранее, вы захотите удалить пробелы в типе
  2. Есть ли какая-то конкретная причина, по которой вы не используете Response.TransmitFile () вместо того, чтобы читать файл в себе?

Я также предлагаю вам добавить кавычки вокруг имени файла, иначе, если он содержит пробелы, он будет усечен в 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. Он поставляется с менеджером загрузки, который я включил. Когда я отключил его, мои проблемы исчезли, и я мог открывать или сохранять свои файлы.

Надеюсь, это окажется полезным для кого-то еще.

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