2013-05-13 109 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. 下载您的文件。

重要的是要注意的是,您可以使用网页或使用文件进行响应,而不是同时进行响应。

相关问题