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

问题描述:

我正在从远程位置将文件下载到本地计算机。我使用的路径保存在web.config中和在以下格式:WebClient.DownloadFileAsync下载服务器上的文件

<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)中的服务器计算机上下载的。我希望它能在本地机器上下载。我做错了什么?

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

所以:

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

或者你也可以写你在客户机上运行,​​它使用Web客户端从远程服务器位置下载文件的桌面应用程序(WPF,WinForms的)。

+0

但我必须在某些机器上部署我的代码。我还应该做些什么? – ria 2010-10-25 08:15:06

+0

对于Web应用程序,您需要在服务器上部署代码。如果您决定编写Windows应用程序,则可以在客户端上部署代码。 – 2010-10-25 08:16:04

+0

谢谢...我现在正在尝试...但它会处理大文件?我有一个18 MB的最大文件大小限制,我希望这个代码不会与这么多数据量打破? – ria 2010-10-25 09:18:22