2010-05-05 19 views
4

J'essaye d'envoyer un fichier en utilisant ftp. J'ai le code suivant:Utilisation de ftp en C# pour envoyer un fichier

string server = "x.x.x.x"; // Just the IP Address 

FileStream stream = File.OpenRead(filename); 
byte[] buffer = new byte[stream.Length]; 

WebRequest request = WebRequest.Create("ftp://" + server); 
request.Method = WebRequestMethods.Ftp.UploadFile;    
request.Credentials = new NetworkCredential(username, password); 

Stream reqStream = request.GetRequestStream(); // This line fails 
reqStream.Write(buffer, 0, buffer.Length); 
reqStream.Close(); 

Mais quand je le lance, je reçois l'erreur suivante:

L'URI est non valide pour cette commande FTP.

S'il vous plaît quelqu'un peut-il me dire pourquoi? Est-ce que je l'utilise incorrectement?

+3

A quoi ressemble 'server'? – thelost

+0

@thelost - question inappropriée ... il ne peut pas nous dire le ftp ... il peut être public ... vous pouvez utiliser une chaîne de temp pour vérifier si l'URI du serveur complet est comme il se doit. Le reste a l'air bien. – GxG

Répondre

8

Je pense que vous devez spécifier le chemin et le nom que vous transférez aussi, donc je pense qu'il devrait être soit:

WebRequest request = WebRequest.Create("ftp://" + server + "/"); 

WebRequest request = WebRequest.Create("ftp://" + server + "/filename.ext"); 
+1

Le premier a donné la même erreur, mais une fois le nom de fichier a été spécifié, il a bien fonctionné - merci –

+0

@ ho1 Merci. FYI: Incase si vous téléchargez dans un dossier alors il devrait être comme 'Demande WebRequest = WebRequest.Create (" ftp: // "+ serveur +" // nom de fichier "+"/filename.ext ");' – Praveen

0

Quand je devais utiliser la méthode ftp, je devais mettre des drapeaux sur l'objet de la demande, sans que la fonction ne fonctionne pas:

FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpPath); 
request.KeepAlive = true/false; 
request.UsePassive = true/false; 
request.UseBinary = xxx; 

Ces drapeaux dépendent du serveur, si vous avez pas accès au serveur, vous ne pouvez pas savoir ce qu'il faut utiliser, mais vous pouvez tester et voir ce que fonctionne dans votre configuration.

Et le nom de fichier est probablement manquant à la fin de l'URI, afin que le serveur sache où sauvegarder le fichier téléchargé.

+0

Ces drapeaux ne semblent pas être des propriétés de l'objet WebRequest –

+0

@ pm_2: désolé, j'ai oublié d'ajouter une ligne où l'objet de requête est créé. C'est en fait un objet de type FtpWebRequest. J'ai mis à jour la réponse pour le montrer. – user218447

Questions connexes