2010-10-25 15 views
1

Je télécharge un fichier depuis un emplacement distant vers mon ordinateur local. Les chemins que je me sers sont enregistrés dans web.config et sont au format suivant:WebClient.DownloadFileAsync Téléchargement du fichier sur le serveur

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

le code que je utilise pour télécharger est:

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

Quand je déployer sur le serveur; et exécutez mon programme, j'obtiens un message disant que le téléchargement s'est terminé avec succès. Mais le problème est que le fichier est téléchargé sur la machine du serveur dans le dossier (LocalFileFolder). Je veux qu'il soit téléchargé sur la machine locale. Qu'est-ce que je fais de mal?

Répondre

3

Ce que vous faites mal, c'est que vous exécutez ce code sur le serveur. S'il s'agit d'une application Web (je suppose que c'est parce que vous utilisez HttpContext), vous devez diffuser le fichier dans la réponse au lieu d'utiliser WebClient. Ensuite, l'utilisateur obtient une boîte de dialogue de téléchargement dans son navigateur et choisit de sauvegarder le fichier où il veut (vous ne pouvez pas le surcharger).

Alors:

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

Ou vous pouvez écrire une application de bureau (WPF, WinForms) que vous exécutez sur la machine cliente et qui utilise WebClient pour télécharger un fichier à partir d'un emplacement de serveur distant.

+0

mais je dois déployer mon code sur une machine. Que devrais-je faire d'autre? – ria

+0

Dans le cas d'une application Web, déployez votre code sur le serveur. Dans le cas où vous décidez d'écrire une application Windows, vous déployez votre code sur le client. –

+0

merci ... je l'essaie maintenant ... mais va-t-il gérer des fichiers énormes? J'ai une limite de taille de fichier maximale de 18 Mo, j'espère que ce code ne cassera pas avec autant de données? – ria