WebClient.DownloadFileAsync在服务器上下载文件

时间:2010-10-25 08:08:09

标签: asp.net asynchronous webclient

我正在从远程位置将文件下载到本地计算机。我使用的路径保存在web.config中,格式如下:

<add key="FileFolder" value="Files/"/>
<add key="LocalFileFolder" value="D:\REAL\" />

我用来下载的代码是:

  CreateDirectoryIfDoesNotExist();
  WebClient webClient = new WebClient();
  webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(webClient_DownloadFileCompleted);
  webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(webClient_DownloadProgressChanged);
  webClient.DownloadFileAsync(new Uri(context.Server.MapPath(ConfigurationManager.AppSettings["FileFolder"].ToString() + myfilename)), ConfigurationManager.AppSettings["LocalFileFolder"].ToString() + myfilename);

当我在服务器上部署它时;并运行我的程序,我收到一条消息,说下载已成功完成。但问题是文件是在文件夹(LocalFileFolder)中的服务器上下载的。我希望它能在本地机器上下载。我做错了什么?

1 个答案:

答案 0 :(得分:3)

您所做错的是您在服务器上运行此代码。如果这是一个Web应用程序(我想这是因为您使用的是HttpContext),您需要将文件流式传输到响应而不是使用WebClient。然后用户在他的浏览器中获得一个下载对话框,并选择将文件保存在他想要的任何地方(你不能覆盖它)。

所以:

context.Response.ContentType = "text/plain";
context.Response.AppendHeader("Content-Disposition", "attachment; filename=foo.txt");
context.Response.TransmitFile(@"d:\pathonserver\somefile.txt");

或者您可以编写一个桌面应用程序(WPF,WinForms),它在客户端计算机上运行,​​并使用WebClient从远程服务器位置下载文件。