C # Asp Net Проблема с загрузкой в ​​Chrome 12 - PullRequest
3 голосов
/ 24 июня 2011

У меня проблема в моем проекте. У меня есть код для загрузки контента: .doc, .zip и т. Д.

Работало нормально до обновления chrome для версии 12, после чего браузер отображает сообщение об ошибке: «Загрузка прервана».

Я уже тестировал в других браузерах (Chrome 11, FF и IE8) и все отлично работает.

Пример кода:

HttpContext.Current.Response.Clear();
HttpContext.Current.Response.AppendHeader("Content-Type", "application/msword");
HttpContext.Current.Response.AppendHeader("Content-disposition", "attachment; filename=" + filename + ".doc");
HttpContext.Current.Response.AppendHeader("Content-Transfer-Encoding", "binary");
HttpContext.Current.Response.Write(strBody);
HttpContext.Current.Response.Flush();
HttpContext.Current.Response.Close();

Кто-то знает, что может происходить или как я могу это исправить?

Ps. Извините за мой английский, я бразилец:)

Ответы [ 3 ]

1 голос
/ 24 июня 2011

Согласно ответу в этот форум добавление Response.End() решило проблему.

В вашем случае это будет

HttpContext.Current.Response.Write(strBody);
HttpContext.Current.Response.Flush();
HttpContext.Current.Response.End();
HttpContext.Current.Response.Close();
0 голосов
/ 06 января 2013

string applicationName = Session ["ApplicationName_UtilityDetail"]. ToString ();

    HttpWebRequest objRequest = (HttpWebRequest)WebRequest.Create(Session["DownloadLink_UtilityDetail"].ToString());
    HttpWebResponse objResponse = (HttpWebResponse)objRequest.GetResponse();
    int bufferSize = 1;
    Response.Clear();
    Response.ClearHeaders();
    Response.ClearContent();
    Response.AppendHeader("Content-Disposition:", "attachment; filename=" + applicationName + ".zip");
    Response.AppendHeader("Content-Length", objResponse.ContentLength.ToString());
    Response.ContentType = "application/download";
    byte[] byteBuffer = new byte[bufferSize + 1];
    MemoryStream memStrm = new MemoryStream(byteBuffer, true);
    Stream strm = objRequest.GetResponse().GetResponseStream();
    byte[] bytes = new byte[bufferSize + 1];
    while (strm.Read(byteBuffer, 0, byteBuffer.Length) > 0)
    {
        Response.BinaryWrite(memStrm.ToArray());
        Response.Flush();
    }
    Response.Close();
    Response.End();
    memStrm.Close();
    memStrm.Dispose();
    strm.Dispose();
0 голосов
/ 09 августа 2012

Я получаю двоичные данные из базы данных сервера sql с этим кодом, и он работает во всех браузерах;

        DataTable table = SiteFileAccess.GetDataByFileID(fileId);
        byte[] b = (byte[])table.Rows[0]["FileData"];
        Response.Clear();
        Response.AddHeader("Content-Disposition", "attachment; filename=" + table.Rows[0]["FileName"].ToString());
        Response.AddHeader("Content-Length", b.Length.ToString());
        Response.ContentType = "application/octet-stream";
        Response.BinaryWrite(b);
        Response.Flush();
        Response.End();

См. Приведенный выше код и исправьте его в соответствии с вашими потребностями.Дайте мне знать, если вам нужна дополнительная информация

...