使用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();
现在它在所有浏览器下都像一个魅力