我正在从远程位置将文件下载到本地计算机。我使用的路径保存在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)中的服务器上下载的。我希望它能在本地机器上下载。我做错了什么?
答案 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从远程服务器位置下载文件。