Response.WriteFile

4

有一个具有特定语法的URL来下载文件。
http://www.hddownloader.com/?url=http://www.youtube.com/watch?v=N-HbxNtY1g8&feature=featured&dldtype=128

用户在文本框中输入文件名,然后按下下载按钮。在单击事件中,调用Response.WriteFile,将文件发送给客户端。

现在我想创建另一个网站,并在其中的页面上,用户输入文件名并按下下载按钮以下载该文件。

现在我想利用第一个URL来实现这一点。我不想使用Response.Redirect,因为通过这种方式,用户会知道我正在使用mydownload.com。

如何实现这一点?

一种方法是:当我们从Microsoft的网站下载东西时,会出现一个小弹窗(没有关闭、最大化和最小化按钮),然后出现保存对话框。

如何实现这个或者别的方式来达到同样的效果?

1个回答

5

您可以使用WebClient.DownloadFile从远程服务器上下载文件到您的服务器:

using (var client = new WebClient())
{
    client.DownloadFile("http://remotedomain.com/somefile.pdf", "somefile.pdf");
    Response.WriteFile("somefile.pdf");
}

如果您不想将文件暂时保存到磁盘上,您可以使用DownloadData方法,然后将缓冲区流式传输到响应中。


更新:

第二种方法的示例:

using (var client = new WebClient())
{
    var buffer = client.DownloadData("http://remotedomain.com/somefile.pdf");
    Response.ContentType = "application/pdf";
    Response.AppendHeader("Content-Disposition", "attachment;filename=somefile.pdf");
    Response.Clear();
    Response.OutputStream.Write(buffer, 0, buffer.Length);
    Response.Flush();
}

嗨,实际上URL是这样的“http://www.hddownloader.com/?url=http://www.youtube.com/watch?v=N-HbxNtY1g8&feature=featured&dldtype=128”。文件名未知。当我评论掉appendheader并使用此URL运行代码时,会抛出以下错误:无法显示XML页面 无法使用XSL样式表查看XML输入。请纠正错误,然后单击刷新按钮,或稍后再试。 请提供建议。 - Akshay J
@Akshay,你不知道URL的情况下无法从远程资源下载文件。抱歉。更不用说这样做可能会违反远程站点的政策。例如,你不应该在YouTube上这样做。 - Darin Dimitrov
嗨,URL已知,但文件名未知。我在早期的评论中发布了URL。 - Akshay J
@Akshay,URL 没有一半的概念。你要么知道指向你要下载的文件的确切 URL,要么需要通过连接来构建它。 - Darin Dimitrov
URL并没有出半个的情况,请看一下我的早前留言,将鼠标悬停在上面即可看见。您也可以查看我的原始问题,我已经在那里进行了更正。 - Akshay J
@Akshay,你展示的URL并没有指向任何文件。它指向一个HTML页面,在那里你需要导航,启用JavaScript等等...直到你到达文件的实际URL。 - Darin Dimitrov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接