2010-10-25 138 views
1

我正在從遠程位置將文件下載到本地計算機。我使用的路徑保存在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)中的服務器計算機上下載的。我希望它能在本地機器上下載。我做錯了什麼?

回答

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"); 

或者你也可以寫你在客戶機上運行,​​它使用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