Response.WriteFile

时间:2011-01-22 13:02:03

标签: asp.net

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

用户在文本框中输入文件名并按下下载按钮。在click事件中,调用Response.WriteFile,将文件发送到客户端。

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

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

我怎样才能实现这一目标。

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

如何实现这一目标或其他目标?

1 个答案:

答案 0 :(得分: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();
}