2013-05-13 115 views
0

從文件.aspx我需要重定向到一個網頁,打開它然後下載一個文件。下面我的代碼:打開一個網頁,然後下載一個文件C#

頁Source.aspx

<script runat="server"> 
     protected override void OnLoad(EventArgs e) 
     { 
      Response.Redirect("Dest.aspx?download=true"); 
      base.OnLoad(e); 
     } 
    </script> 

頁Dest.aspx

<script runat="server"> 

    private void Page_Load(object sender, System.EventArgs e) 
    { 
     string download= (string)Request.QueryString["download"]; 

     if (download == "true") 
     {  
      string url = "myurl/myfile.exe"; 

      System.Net.HttpWebRequest objRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url); 
      System.Net.HttpWebResponse objResponse = (System.Net.HttpWebResponse)objRequest.GetResponse(); 
      int bufferSize = 1; 

      Response.ClearHeaders(); 
      Response.ClearContent(); 
      Response.AppendHeader("content-disposition:", @"attachment;filename=""myFileName.exe"""); 
      Response.AppendHeader("Content-Length", objResponse.ContentLength.ToString()); 
      Response.ContentType = "application/download"; 

      byte[] byteBuffer = new byte[bufferSize + 1]; 
      System.IO.MemoryStream memStrm = new System.IO.MemoryStream(byteBuffer, true); 
      System.IO.Stream strm = objRequest.GetResponse().GetResponseStream(); 
      byte[] bytes = new byte[bufferSize + 1]; 
      while (strm.Read(byteBuffer, 0, byteBuffer.Length) > 0) 
      { 
       Response.BinaryWrite(memStrm.ToArray()); 
       Response.Flush(); 
      } 

      Response.Close(); 
      Response.End(); 
      memStrm.Close(); 
      memStrm.Dispose(); 
      strm.Dispose(); 
     }   
    } 
</script> 

兩個現在的問題:

  1. 調用頁面 「Source.aspx」 的下載是自動啓動的,但頁面Dest.aspx未顯示在瀏覽器中

  2. 下載的文件名爲「Dest.aspx」,而不是我設置的「myFileName.exe」廣告 Response.AppendHeader(「content-disposition:」,@「attachment; filename =」「myFileName.exe 「」「);

+0

爲什麼你試圖重定向到第二頁,你可以簡單地在第一個'OnLoad'事件中下載文件。看起來奇怪的是'腳本runat =「server」>'在用戶的計算機上下載文件。 – 2013-05-13 11:20:53

+0

@Rahul謝謝,解決第二個問題。 – user2377447 2013-05-13 12:12:33

+0

@Rhhound使用OnLoad而不是PageLoad並不能解決我的第一個問題。該文件已下載,但該頁面及其內容未顯示。我想要的是顯示頁面,然後「然後」讓文件被下載。 – user2377447 2013-05-13 12:15:39

回答

0

你的第二個問題,問題嘗試類似的東西

string attachment = string.Format(CultureInfo.InvariantCulture, "attachment; filename=" + sfilename + "", fi.Name); 
Response.ContentType = "application/octet-stream"; 
Response.AppendHeader("Content-Disposition", attachment); 

希望它爲你工作。

+0

這段代碼還沒有解決你的問題.. – Rahul 2013-05-13 12:34:54

+0

不,只有第二個問題..第一個問題依然存在。有沒有辦法在啓動代碼下載文件之前檢查網頁是否完全加載? – user2377447 2013-05-13 12:42:17

+0

是需要下載頁面加載文件,意味着在'Dest.aspx'頁面上,你可以使用任何'按鈕',它說'下載文件'類似的東西,這將下載文件,你的網頁也會顯示。 – Rahul 2013-05-13 12:45:13

0

正確的,你所需要的做的是分裂過程有兩種:

  1. 顯示您的網頁,並在報頭中設置一個重定向值自動重定向到您的下載。
  2. 下載您的文件。

重要的是要注意的是,您可以使用網頁或使用文件進行響應,而不是同時進行響應。

相關問題