VB.NET. Comment faire un upload FTP ? en particulier sur un serveur dédié OVH

Problématique

Vous souhaitez uploader un fichier sur votre serveur dédié. Je précise bien qu’il s’agit du sens ordinateur local vers serveur, car du point de vue du serveur, il s’agit d’un download, et dans certaines administrations de serveurs, on n’est jamais sûr du point de vue dont il est question.

Et pour uploader un fichier, vous vous dites que vous aller écrire une fonction réutilisable parce qu’on est tout de même pas des bricolos. Non mais !

Vous regardez sur les sites techniques, vous tombez sur plusieurs options possibles : laquelle choisir ? Plus de souci, la mienne exposée ci-dessous, elle fonctionne bien et vous pouvez toujours l’adapter si mes noms de variables ne vous plaise pas, ce qui est votre droit le plus strict.

Et puis, il y a une deuxième question : comment nommé-je l’hôte, sachant que dans mon cas, il s’agit d’un serveur dédié OVH (dont je suis très satisfait d’ailleurs, du serveur et d’OVH). Vous aurez la solution en bonus.

NE SUIS-JE PAS D’UNE GRANDE CLÉMENCE ?

Solution

La fonction ne permet que de traiter les fichiers un par un. Vous pourriez l’adapter pour en traiter plusieurs. Mais l’objectif n’est pas de réécrire FileZilla tout de même ! Si ?

en posant les noms suivants pour les arguments :

  • srcFile : nom complet du fichier à envoyer (ex. « c:\images\janine.jpg »)
  • destWebSite : nom du site hébergé (ex. « www.ma-vie-mon-oeuvre.com »)
  • destDir : nom du répertoire dans le site (ex. « photos-de-vacances/2013/ »)
  • destFile : nom du fichier de réception (ex. « janine-a-la-plage.jpg » parce que vous aviez déjà un « janine.jpg » sur le serveur mais c’était au ski)

Public Function FTPUpload(ByVal srcFile As String, ByVal destWebSite As String, ByVal destDir As String, ByVal destFile As String) As Boolean

Dim ftp As System.Net.FtpWebRequest
Dim destURI As String

FTPUpload = False

On Error GoTo erreur

destURI = « ftp://ns123456.ovh.net/ » & destWebSite & « / » & destDir & « / » & destFile
ftp = DirectCast(System.Net.WebRequest.Create(destURI), System.Net.FtpWebRequest)
ftp.Credentials = New System.Net.NetworkCredential(ftpUser, ftpPassword)
ftp.Method = System.Net.WebRequestMethods.Ftp.UploadFile
ftp.KeepAlive = False

‘ lecture du fichier à envoyer
Dim bFile() As Byte = System.IO.File.ReadAllBytes(srcFile)

‘ upload proprement dit
Dim ftpStream As System.IO.Stream = ftp.GetRequestStream()
ftpStream.Write(bFile, 0, bFile.Length)
ftpStream.Close()
ftpStream.Dispose()
ftpStream.Flush()

FTPUpload = True

End Function

vous aurez noté soigneusement la syntaxe de l’URI de destination.

Bien entendu, vous pouvez aussi retirer les préfixes System.Net et System.IO si vous avez placé en tête de votre module respectivement : Imports System.Net et Imports.System.IO.

Enfin, Henri, dans un commentaire du 30/12/2014 précise que le solution, testée en VB.NET 2008 fonctionne telle quelle en version 2013. Ce dont je le remercie. Henri pas VB 2013.

 POUR EN SAVOIR PLUS : les derniers livres parus sur Visual Basic sont sur

DerniersParus.com » Visual Basic

Laisser un commentaire