Ошибка загрузки файла через https в IE - PullRequest
0 голосов
/ 04 марта 2011

Я пытаюсь загрузить файл через HTTPS, и в IE он не работает, но отлично работает с Firefox & Chrome:

код aspx выглядит следующим образом:

<%@ Page Language="C#" MasterPageFile="~/MasterPage.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="CRISIIWebApplication1.Default" Title="Untitled Page" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
  <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
  <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click"  />  
</asp:Content>

Код за кодом при нажатии кнопки выглядит следующим образом:

protected void Button1_Click(object sender, EventArgs e)
        {
            string filename = TextBox1.Text;
            string filepath = Server.MapPath(filename);

        byte[] bytFile = null;
        FileStream fs = new FileStream(filepath, FileMode.Open, FileAccess.Read);
        BinaryReader br = new BinaryReader(fs);
        long numBytes = new FileInfo(filepath).Length;
        bytFile = br.ReadBytes((int)numBytes);
        string extension = ".xlsx";

        Response.ClearHeaders();
        Response.Clear();
        Response.Buffer = true;

        if (extension == ".doc")
        {
            Response.ContentType = "application/vnd.ms-word";
            Response.AddHeader("content-disposition", "attachment;filename=" + filename);
        }

        else if (extension == ".docx")
        {
            Response.ContentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
            Response.AddHeader("content-disposition", "attachment;filename=" + filename);
        }

        else if (extension == ".xls" || extension == ".xlsx")
        {
            if (extension == ".xls")
            {
                Response.ContentType = "application/vnd.ms-excel";
                Response.AddHeader("content-disposition", "attachment;filename=" + filename);
            }
            else
            {
                Response.ContentType = "application/ms-excel";
                //Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
                Response.AddHeader("content-disposition", "attachment;filename=" + filename);
            }
        }
        else if (extension == ".pdf")
        {
            Response.ContentType = "application/pdf";
            Response.AddHeader("content-disposition", "attachment;filename=" + filename);
        }

        Response.Charset = "";
        Response.Cache.SetCacheability(HttpCacheability.NoCache);

        Response.BinaryWrite(bytFile);
        HttpContext.Current.ApplicationInstance.CompleteRequest();
        Response.End();
    }

Пожалуйста, помогите

Ответы [ 4 ]

4 голосов
/ 04 марта 2011

Когда пользователь SquidScareMe пишет, вы должны игнорировать / не трогать настройки кэша для файлов Office при загрузке их по SSL.

У меня есть обработчик .ashx, который имеет фрагмент вроде:

// "Internet Explorer is unable to open Office documents from an SSL Web site".
// http://support.microsoft.com/kb/316431/en-us
if (!context.Request.IsSecureConnection || !isInternetExplorer(context))
{
    // No cache.
    context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
    context.Response.AppendHeader(@"Pragma", @"no-cache");
}

С этой функцией:

private static bool isInternetExplorer(HttpContext context)
{
    return context.Request.Browser.Browser == @"IE";
}
1 голос
/ 23 июня 2011

Обходное решение этой проблемы - активировать сжатие в ISA. После этого шага веб-сайт может передавать файлы без проблем! Проблема возникает, когда вы пытаетесь передать файл по HTTPS, используя no-cache.

1 голос
/ 04 марта 2011

http://blogs.msdn.com/b/ieinternals/archive/2009/10/03/internet-explorer-cannot-download-over-https-when-no-cache.aspx

Обновление: ахах! http://www.openrdf.org/issues/browse/SES-63

РЕШЕНИЕ : Internet Explorer-> меню Сервис-> Свойства обозревателя-> вкладка "Дополнительно" Перейдите в раздел «Безопасность» внизу. Снимите флажок «Не сохранять зашифрованные страницы на диск» Закройте все окна Internet Explorer Запустите IE и снова загрузите файл

0 голосов
/ 30 августа 2012

Это можно исправить, указав заголовок Cache-Control следующим образом:

Response.AddHeader("Cache-Control", "no-store, no-cache");

Таким образом, вы все равно можете указать настройки кеша, и он будет работать с https.

См .: http://blogs.msdn.com/b/ieinternals/archive/2009/10/03/internet-explorer-cannot-download-over-https-when-no-cache.aspx

...