代码之家  ›  专栏  ›  技术社区  ›  Peter Evjan

使用ASP.NET在IE8中通过https下载文件。网

  •  8
  • Peter Evjan  · 技术社区  · 16 年前

    我试图通过一个重定向按钮,让用户可以从我们的网站下载Excel电子表格:

    Response.Redirect(string.Format("../excel/ExcelForm.aspx?pathName=&fileNameDisplay={0}&fileNameUnique={1}", "spreadsheet.xls", fileName));
    

    aspx页面只是通过Response对象发回文件,如下所示:

     Response.ContentType = "application/vnd.ms-excel";
     Response.AddHeader("Content-Disposition", "attachment; filename=" + fileNameDisplay);
     Response.WriteFile(Server.MapPath(pathName + fileNameUnique));
     Response.Flush();
     Response.End();
    

    在我的机器上一切正常,但当我们把它放在服务器上时,https加上无缓存设置会给我们一个错误,说“Internet Explorer无法下载[blahblahblah]”。显示excel按钮的页面上的缓存设置:

    HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);
    HttpContext.Current.Response.ExpiresAbsolute = DateTime.Now.AddDays(-1);
    HttpContext.Current.Response.Expires = 0;
    HttpContext.Current.Response.AddHeader("Pragma", "no-cache");
    HttpContext.Current.Response.AddHeader("cache-control", "private, no-cache, must-revalidate no-store pre-check=0 post-check=0 max-stale=0");
    HttpContext.Current.Response.Cache.SetNoServerCaching();
    

    Response.ClearHeaders();
    

    3 回复  |  直到 16 年前
        1
  •  15
  •   Jamie Dixon    16 年前

          Response.ClearHeaders();
          Response.Clear();
    

        2
  •  3
  •   Vinod T. Patil    16 年前

    Response.AppendHeader("Pragma", "no-cache") 
    Response.AppendHeader("Cache-Control", "no-cache") 
    Response.AppendHeader("max-age", "0") 
    

    一些博客说,要解决这个问题,你应该在Webserver和所有客户端机器上的Windows注册表中进行一些修改(:O),但在每台客户端机器上进行注册表设置是不可行的。

    Response.ClearHeaders() 
    

    在将要下载的内容添加到响应标头之前。代码如下所示,

    Response.ClearHeaders() 
    Response.ContentType = "application/ms-excel" 
    Response.AppendHeader("content-disposition", "attachment; filename=""" + fileName + """") 
    Response.BinaryWrite(fileBytes) 
    Response.End() 
    

    享受!!!

        3
  •  0
  •   Yannick Richard    12 年前

    我遇到了同样的问题,我无法通过IE8下载二进制流

    根据此页面上的信息,我的新代码看起来像

    • 回应。BinaryWrite(字节);
    • 回应。End();

    现在它在所有浏览器下都能正常工作

    推荐文章