Response.AddHeader ("Content-Disposition") не открывает файл в IE6 - PullRequest
7 голосов
/ 08 октября 2010

Я использую Response.AddHeader («Content-Disposition», «attachment; filename =» + Server.HtmlEncode (FileName));вывести диалоговое окно «открыть / сохранить файл» для пользователей, чтобы они могли загрузить файл на свои локальные машины.

Это нормально работает в IE7, но в IE6 файл не открывается, когдапользователь нажимает кнопку открытия в диалоге «открыть / сохранить файл».Я прошел через сеть и обнаружил, что Response.AddHeader («Content-Disposition», «inline; filename =» + Server.HtmlEncode (FileName));Должно быть обеспечено, чтобы работать в IE6, и он работает нормально ..

Но проблема в том, что большинство файлов, которые могут открываться в браузере, открывается на самой странице .. т.е. пользователь на почтовой странице и нажимает кнопку загрузкифайл изображения, который он там открывает, мне нужно, чтобы он открылся в другом окне, как в случае с IE7, что я могу сделать ... другие файлы, которые не могут открываться в bowser, открываются с помощью текущего приложения в системе, т. е. (word, excel и т. д.)

, пожалуйста, предложите способ придерживаться одного и того же кода для обоих IE ... Код, который я использовал здесь ...

Response.AddHeader("Content-Disposition", "attachment; filename=" +FileName);
Response.AddHeader("Content-Length", file.Length.ToString());
Response.ContentType = ReturnExtension(file.Extension.ToLower());
Response.TransmitFile(file.FullName);
Response.End();

 private string ReturnExtension(string fileExtension)
    {
        switch (fileExtension)
        {
            case ".txt":
                return "text/plain";
            case ".doc":
                return "application/ms-word";
            case ".xls":
                return "application/vnd.ms-excel";
            case ".gif":
                return "image/gif";
            case ".jpg":
            case "jpeg":
                return "image/jpeg";
            case ".bmp":
                return "image/bmp";
            case ".wav":
                return "audio/wav";
            case ".ppt":
                return "application/mspowerpoint";
            case ".dwg":
                return "image/vnd.dwg";
            default:
                return "application/octet-stream";
        }
    }

Ответы [ 2 ]

14 голосов
/ 12 октября 2010

Я нашел проблему в IE 6, мы должны прочитать содержимое и использовать буферы и двоичную запись для открытия файла в IE 6, приведенный ниже код отлично работает для меня в IE6

FileStream sourceFile = new FileStream(Server.MapPath(@"FileName"), FileMode.Open);
float FileSize;
FileSize = sourceFile.Length;
byte[] getContent = new byte[(int)FileSize];
sourceFile.Read(getContent, 0, (int)sourceFile.Length);
sourceFile.Close();
Response.ClearContent();
Response.ClearHeaders();
Response.Buffer = true;
Response.ContentType = ReturnExtension(file.Extension.ToLower());
Response.AddHeader("Content-Length", getContent.Length.ToString());
Response.AddHeader("Content-Disposition", "attachment; filename=" + FileName);
Response.BinaryWrite(getContent);
Response.Flush();
Response.End();
2 голосов
/ 08 октября 2010

Попробуйте установить тип контента для потока октетов:

Response.ContentType = "application/octet-stream";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...