2009-11-05 74 views
8

我想有可能使用戶從我們的網站下載一個Excel電子表格,具有一個按鈕,通過這個重定向:在下載IE8中HTTPS文件,使用ASP.NET

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(); 

一切正常,我的機器就好了,但是當我們把它的服務器上,與NO-組合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」。這就是我卡住的地方。建議?

回答

15

我最近在從MVC控制器方法導出CSV文件時,自己也遇到了類似的問題。我發現,添加:

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

在IE

希望這有助於解決這個問題對我來說!

+0

電腦說,是的! – 2009-11-05 17:28:10

+0

您擁有\ o /。像魅力一樣工作\ o/ – 2013-10-07 15:00:08

3

我也面臨同樣的問題,

當我GOOGLE了它,我發現,在響應報頭「無chache」設置,即下面的代碼是問題的原因。

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

一些博客說,爲了解決這個問題,你應該做的網絡服務器和所有客戶機在Windows註冊表中的某些修改(:O),以及它是不可行的每個客戶端上做的註冊表設置機。

的根本原因是在響應頭無緩存的設置,所以我剛添加

Response.ClearHeaders() 

添加內容被下載到所述響應報頭的前面。代碼如下所示,

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

它已經解決了這個問題。

Enjoy !!!

+0

我會嘗試你的建議。謝謝。 (我有同樣的問題) – ileon 2010-07-09 10:25:55

+0

你不會失望;):) – 2010-07-09 11:32:44

0

我有相同的問題我無法下載二進制流槽IE8

根據此頁面上的信息,我的新代碼看起來像

  • Response.ClearHeaders();
  • Response.ContentType =「application/octet-stream」;
  • 迴應。AppendHeader(「content-disposition」,string.Format(「attachment; filename = {0}」,「nameofthefile.exe」));
  • Response.BinaryWrite(bytes);
  • Response.End();

,現在,它就像一個魅力下的所有瀏覽器