首页 文章

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

提问于
浏览
8

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

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

Response.ClearHeaders();

这只是给了我“Internet Explorer无法从[url]下载ExcelForm.aspx” . 那就是我被困住的地方 . 建议?

3 回答

  • 0

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

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

    在IE中解决了我的问题

    希望这可以帮助!

  • 3

    我也遇到了同样的问题,

    当我用Google搜索它时,我发现响应 Headers 中的“无chache”设置,即代码后面是问题的原因 .

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

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

    根本原因是响应头中没有缓存设置,所以我刚刚添加

    Response.ClearHeaders()
    

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

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

    它解决了这个问题 .

    请享用!!!

  • 15

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

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

    • Response.ClearHeaders();

    • Response.ContentType = "application/octet-stream";

    • Response.AppendHeader("content-disposition",string.Format("attachment; filename={0}","nameofthefile.exe"));

    • Response.BinaryWrite(bytes);

    • Response.End();

    现在它在所有浏览器下都像一个魅力

相关问题