【问题标题】:Downloading a file over https in IE8, using ASP.NET使用 ASP.NET 在 IE8 中通过 https 下载文件
【发布时间】:2010-12-13 12:27:15
【问题描述】:

我试图让用户可以从我们的网站下载 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();

当我删除这些行时,一切正常。但是,由于其他原因,我不允许删除它们。因此,我尝试在 ExcelForm.aspx 将内容添加到标题之前添加以下行:

Response.ClearHeaders();

这只是给我“Internet Explorer 无法从 [url] 下载 ExcelForm.aspx”。这就是我卡住的地方。有什么建议吗?

【问题讨论】:

    标签: c# asp.net excel https


    【解决方案1】:

    我最近在从 MVC 控制器方法导出 CSV 文件时遇到了类似的问题。我发现添加:

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

    在 IE 中为我解决了问题

    希望这会有所帮助!

    【讨论】:

    • 你拥有\o/。像魅力一样工作\o/
    【解决方案2】:

    我也遇到了同样的问题,

    当我搜索它时,我发现响应标头中的“no chache”设置,即以下代码是问题的原因。

    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】:

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

    根据此页面上的信息,我的新代码如下所示

    • Response.ClearHeaders();
    • Response.ContentType =“应用程序/八位字节流”;
    • Response.AppendHeader("content-disposition", string.Format("attachment; filename={0}", "nameofthefile.exe"));
    • Response.BinaryWrite(字节);
    • Response.End();

    现在它在所有浏览器下都像魅力一样工作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-16
      • 2012-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多