打开网页然后下载文件 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">
在用户的计算机上下载文件似乎很奇怪。
@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就不断的打开网页。这是怎么回事?