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

我试图让用户可以从我们的网站下载一个Excel电子表格,通过一个button来redirect通过这个:

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和无caching设置的组合给了我们一个错误:“Internet Explorer无法下载[blahblahblah]”。 显示excelbutton的页面上的caching设置:

 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”。 而这就是我卡住的地方。 build议?

我最近自己有一个类似的问题,当从MVC控制器方法中导出CSV文件时。 我发现补充:

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

在IE中解决了我的问题

希望这可以帮助!

我也面临同样的问题,

当我GOOGLE了,我发现在响应标题,即下面的代码“没有chache”设置是问题的原因。

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

有些博客说,为了解决这个问题,你应该在Web服务器的Windowsregistry和所有的客户端机器(:O)上进行一些修改,而且在每台客户端机器上进行registry设置都是不可行的。

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

 Response.ClearHeaders() 

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

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

它已经解决了这个问题。

请享用!!!

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

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

  • Response.ClearHeaders();
  • Response.ContentType =“application / octet-stream”;
  • Response.AppendHeader(“content-disposition”,string.Format(“attachment; filename = {0}”,“nameofthefile.exe”));
  • Response.BinaryWrite(字节);
  • 到Response.End();

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