Bonjour
J'ai besoin de transférer un répertoire contenant des sous répertoires et des fichiers sur des serveurs ftp SSL ou non.
J'ai mis un bon moment avant de comprendre qu'il n'y a pas de solution miracle (comme C# nous y habitue) tel que UploadRepertoireEtDebrouilleToiDeTout(CheminduRepertoire,HostName,Login,password)
et finalement j'ai réussi à transférer un fichier avec ce code :
Partant de là il me faut trouver comment créer les répertoires (ça je devrais y arriver...) puis faire une routine récursive pour transférer tout mon répertoire et son contenu.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 public async Task<string> UploadFile(String FilePath,String Login, String Pass, String HostName, int Port, bool SSL, bool ModePassif) { try { var myUri = new Uri("ftp://" + HostName + "/macarte1/testftp.text"); // il faut que le répertoire existe !! var builder = new UriBuilder(myUri); builder.Port = Port; FtpWebRequest request = (FtpWebRequest)WebRequest.Create(builder.Uri.ToString()); request.Method = WebRequestMethods.Ftp.UploadFile; request.EnableSsl = (bool)SSL; request.UsePassive = (bool)ModePassif; request.KeepAlive = false; SecureString securePwd = new SecureString(); securePwd = new NetworkCredential("", Pass).SecurePassword; request.Credentials = new NetworkCredential(Login, securePwd); ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(myCertificateValidation); string ReponseFTP = null; StreamReader sourceStream = new StreamReader(FilePath); byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd()); sourceStream.Close(); request.ContentLength = fileContents.Length; Stream requestStream = request.GetRequestStream(); await requestStream.WriteAsync(fileContents, 0, fileContents.Length); requestStream.Close(); FtpWebResponse response = (FtpWebResponse)request.GetResponse(); ReponseFTP = response.StatusDescription; response.Close(); return ReponseFTP; } catch (Exception Ex) { MessageBox.Show(Ex.Message.ToString(), "Erreur !", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1); return "erreur!"; }
Et là gros soucis : comment transférer plusieurs fichiers dans la même cession FTP ?
Je vois bien comment (et je trouve pleins d'exemples) faire plusieurs write successifs mais comme le nom du fichier est défini au tout début dans le WebRequest.Create, je ne vois pas comment transférer un autre fichier sur le même serveur sans tout relancer. Or sur un serveur SSL le temps de connexion est très loin d'être négligeable...
Merci par avance pour vos lumières
Partager