Загрузка файла не работает с IE7 - PullRequest
2 голосов
/ 16 октября 2008

У меня есть страница asp.net, которая отправляет содержимое файла клиенту, поэтому браузер отображает диалоговое окно «Сохранить как» для загрузки файла. Эта страница отображается во всплывающем окне, и когда пользователь нажимает кнопку «Сохранить», она автоматически закрывается и начинается загрузка.

На Windows Server 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');

РЕДАКТИРОВАТЬ: Я исправил пробелы, но, к сожалению, они не являются проблемой.

РЕДАКТИРОВАТЬ 2: : Кажется, что эта проблема не связана с Vista, но только IE. Я также обнаружил, что он работает нормально, когда проект запускается на сервере разработки локально, но при работе с подключенным сервером публикации не удается загрузить файл.

Ответы [ 7 ]

8 голосов
/ 16 октября 2008

Попробуйте удалить пробелы в вашем ContentType. Стандарт application/octet-stream.

2 голосов
/ 17 октября 2008

Я бы также предложил добавить кавычки вокруг имени файла, в противном случае, если он содержит пробелы, он будет обрезан в Firefox.

2 голосов
/ 16 октября 2008

Две вещи.

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

Я не могу указать на конкретную проблему в вашем коде (за исключением, возможно, того типа контента, который выглядит плохо сформированным; не уверен, имеет ли это значение). Вот код, который я использую для этого, который работает как в 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();
0 голосов
/ 07 июля 2010

Я наткнулся на этот пост, потому что у меня была похожая проблема, если не та же. Я использую IE8 в Windows 7.

При отладке на моем локальном компьютере я мог отображать приглашение «Загрузка файла», но при нажатии «Сохранить» или «Открыть» окно «Ход выполнения загрузки» отображалось в течение примерно половины секунды, а затем внезапно закрывалось, ничего не загружая. *

У меня установлена ​​надстройка для Internet Explorer с именем IE7Pro . Он поставляется с менеджером загрузок, который я включил. Когда я отключил его, мои проблемы исчезли, и я смог открыть или сохранить свои файлы.

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

0 голосов
/ 02 апреля 2009

У меня тоже была такая же проблема ... и я использовал это решение (я использую его на button.click):

Response.ContentType = "text/txt";
Response.AppendHeader("Content-Disposition", "attachment; filename="+DownloadFileName);
Response.Write(MyFileContent_Text_);
Response.End();

... это просто сработало !!

0 голосов
/ 27 февраля 2009

Я думаю, что ваша проблема может быть с IIS 7. Проблема с «addHeader» на новом информационном сервере Интернета с режимом конвейера интеграции.

Попробуйте использовать Response.AppendHeader.

...