2017-06-23 1 views
0

Fondamentalement, j'ai une URL qui ressemble à ceci http://127.0.0.1/here que lorsque vous cliquez dessus télécharge automatiquement un fichier zip. J'ai essayé d'utiliser des méthodes webclient mais je n'arrive pas à le faire fonctionner et je continue à recevoir des erreurs. J'ai essayé de faire en sorte que le client web télécharge tous les fichiers dans ce dossier mais il bombarde à chaque fois et ne peut pas accéder correctement à l'URL.Télécharger le fichier en utilisant C# où le nom de fichier est inconnu et le chemin ne possède pas d'extension

J'essaie d'obtenir une application cliente pour télécharger un fichier depuis le serveur web. Webclient.DownloadFile ne fonctionne pas et renvoie "erreur inconnue". Au lieu d'être spécifique et de télécharger le fichier zip, j'ai essayé de télécharger n'importe quel fichier qui se trouvait dans le répertoire.

+0

Si vous ouvrez manuellement 'http: // 127.0.0.1/here' avec un navigateur Web, que se passe-t-il? – jAC

+0

Il ouvre automatiquement une fenêtre de téléchargement. Comme "télécharger le fichier/annuler" – Kriyen

Répondre

1

Alors je l'ai fait fonctionner. Il s'avère que le client Web jetait des 401, mais je n'ai pas géré correctement les erreurs, donc je n'ai pas compris. L'ajout de "usedefaultcredentials" a résolu mon problème.

 string url = "http://127.0.0.1/here"; 
     WebClient client = new WebClient(); 
     client.UseDefaultCredentials = true; 
     client.DownloadFile(new Uri(url), @"C:\temp\test.zip"); 
1

En utilisant GetResponseStream vous pouvez directement écrire la réponse téléchargée dans un fichier.

public static void SaveUrlToFile(string uri, string filePath) 
{ 
    var fileReq = HttpWebRequest.Create(uri) as HttpWebRequest; 

    //Create a response for this request 
    var fileResp = (HttpWebResponse) fileReq.GetResponse(); 

    //Get the Stream returned from the response 
    using (var stream = fileResp.GetResponseStream()) 
    { 
     using (var fileStream = File.OpenWrite(filePath)) 
     { 
      stream.CopyTo(fileStream); 
     } 
    } 
} 

Notez que HttpWebRequest.Create(url) tel que défini here a besoin d'un URI à passer, donc assurez-vous que vous mettez http ou https au début. Donc, votre appel serait quelque chose comme SaveUrlToFile("http://127.0.0.1/here", "output.zip")