打开网页然后下载文件 C#

Posted

技术标签:

【中文标题】打开网页然后下载文件 C#【英文标题】:Open a webpage then download a file C# 【发布时间】:2013-05-07 09:35:25 【问题描述】:

从文件 .aspx 我需要重定向到网页,打开它然后下载文件。按照我的代码:

页面来源.aspx

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

页面目标.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>

现在有两个问题:

    调用页面“Source.aspx”会自动开始下载,但浏览器中未显示页面 Dest.aspx

    下载的文件名为“Dest.aspx”,而不是我设置的“myFileName.exe”广告 Response.AppendHeader("content-disposition:", @"attachment;filename=""myFileName.exe""");

【问题讨论】:

你为什么尝试重定向到第二个页面,你可以简单地下载第一个OnLoad事件中的文件。 script runat="server"&gt; 在用户的计算机上下载文件似乎很奇怪。 @Rahul 谢谢,解决第二个问题。 @Ramhound 使用 OnLoad 代替 PageLoad 并不能解决我的第一个问题。文件已下载,但未显示页面及其内容。我想要的是显示页面并“然后”让文件被下载。 【参考方案1】:

对,你需要做的就是把这个过程一分为二:

    显示您的页面并在标题中设置重定向值以自动重定向到您的下载。 下载您的文件。

需要注意的重要一点是,您可以使用网页或文件进行响应,不能同时使用两者。

【讨论】:

【参考方案2】:

对于你的第二个问题,试试类似的方法

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

希望它对你有用。

【讨论】:

不,只有第二个问题。。第一个问题仍然存在。有没有办法在启动代码下载文件之前检查网页是否完全加载? 是否需要在页面加载时下载文件,意味着在Dest.aspx 页面上,您可以使用任何button,上面写着download file 类似的东西,这将下载文件和您的页面也会显示。 意味着您也可以通过Dest.aspx上的按钮点击事件调用您的下载功能 检查您的网页是否已完全加载,您可以使用页面的LoadComplete 事件,试试这个***.com/questions/8587555/… 我已尝试按照有关 PageLoad_Complete 的链接上的说明进行操作,但“下载文件”功能继续启动并且页面未加载,也许我的下载代码有问题?

以上是关于打开网页然后下载文件 C#的主要内容,如果未能解决你的问题,请参考以下文章

下载了一个压缩的网站文件。然后打开网站文件的index.html就不断的打开网页。这是怎么回事?

如何在C#做的网页里添加bin文件和DLL?

这种直接打开就是.pdf的网页是如何实现的? 用过百度网盘,是要跳转到下载页面,并不能直接打开。

aspx 按钮打开新网页

如何批量抓取网页目录下的所有文件

每次运行.bat文件都直接打开网页。。。怎么改回去啊?