IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Upload FTP de plusieurs fichiers sur un serveur embarqué linux


Sujet :

VB.NET

  1. #1
    Membre averti Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    929
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 929
    Points : 312
    Points
    312
    Par défaut Upload FTP de plusieurs fichiers sur un serveur embarqué linux
    Bonjour,

    J'ai besoin de créer un petit client FTP (sous windows) qui va uploader quelques fichiers sur un serveur FTP embarqué sous linux.

    J'ai crée un formulaire avec un listview avec des cases à cochées afin de sélectionner les fichier à uploader.
    J'ai un crée une classe contenant le nom du fichier, le chemin de destination, le chemin local. (Appelé BDD)

    Au démarrage mon logiciel lit un fichier texte contenant tout les fichiers à Uploader. je rempli ma classe BDD que je stocke dans un dictionnaire.

    Private LaListe As Dictionary(Of String, BDD)

    Je rempli la listview avec.

    l'utilisateur choisi ensuite tout ou une partie des fichiers à uploader.

    Puis un bouton Upload.

    Et la je bloque, j'ai trouvé plusieurs code plus ou moins compliqué pour faire du ftp. Mais rien ne fonctionne pour le moment.

    Voici le plus simple que j'ai trouvé que j'ai légèrement adapté à ma situation:

    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
    Dim User As String = txtUser.Text
    Dim Pass As String = txtPassword.Text
    Dim FichLocal As String
    Dim Fichftp As String
     
     
    For Each itm As ListViewItem In ListView1.Items
         Try
             If itm.Checked Then
                 FichLocal = LaListe(itm.Text).ChSource
                 'FichLocal = par exemple "D:\mesFichier\MonFichier"
                 'il n'y a pas forcement d'extension
                 If File.Exists(FichLocal) Then
                     Fichftp = "ftp://" & txtAdrrIP.Text & LaListe(itm.Text).ChDest
                     'Fichftp = "ftp://10.234.3.2/home/bin/Monfichier"
                     My.Computer.Network.UploadFile(FichLocal, Fichftp, User, Pass)
                 End If
     
     
             End If
         Catch ex As Exception
     
         End Try
     
    Next
    Mais j'ai une exception (550) fichier non disponible

    J'avais tenté une autre approche plus complexe mais j'obtenais le même résultat.

    Je précise que lorsque je fait du ftp avec l'invite de commande tout se passe bien. Le serveur est en fonctionnement, les répertoires sont créé.
    Je précise aussi qu'il se peut que les fichiers soit déjà présent, dans ce cas il faudrait pouvoir les écraser sans confirmation de la part de l'utilisateur.


    Je viens d'essayer en créant un classe clsFTP:
    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    Imports System.Net
    Imports System.IO
     
     
    Public Class clsFTP
        Public Function FTP_Upload(ByVal Source As String, ByVal dest As String, ByVal User As String, ByVal Pass As String) As Boolean
            Try
     
                Dim request As FtpWebRequest = DirectCast(WebRequest.Create(dest), FtpWebRequest)
                request.Method = WebRequestMethods.Ftp.UploadFile
                request.KeepAlive = False
     
                request.Credentials = New NetworkCredential(User, Pass)
     
                Dim sourceStream As FileStream = File.OpenRead(Source)
                Dim fileContents As Byte() = New Byte(sourceStream.Length) {}
                sourceStream.Read(fileContents, 0, fileContents.Length)
                sourceStream.Close()
                request.ContentLength = fileContents.Length
     
                Dim requestStream As Stream = request.GetRequestStream()
                requestStream.Write(fileContents, 0, fileContents.Length)
     
                requestStream.Close()
     
                Dim response As FtpWebResponse = DirectCast(request.GetResponse(), FtpWebResponse)
     
                Dim codeMessage As Integer = Convert.ToInt32(response.StatusCode)
     
                response.Close()
                FTP_Upload = True
            Catch ex As Exception
                FTP_Upload = False
     
            End Try
     
        End Function
     
     
     
     
        Public Function FTP_Dowload(ByVal Source As String, ByVal Dest As String, ByVal User As String, ByVal Pass As String) As Boolean
            Try
                Dim request As FtpWebRequest = DirectCast(WebRequest.Create(Source), FtpWebRequest)
                request.Method = WebRequestMethods.Ftp.DownloadFile
     
                request.Credentials = New NetworkCredential(User, Pass)
     
                Dim response As FtpWebResponse = DirectCast(request.GetResponse(), FtpWebResponse)
     
                Dim responseStream As Stream = response.GetResponseStream()
     
                Dim writeStream As New FileStream(Dest, FileMode.Create)
     
                Dim Length As Integer = 2048
                Dim buffer As Byte() = New Byte(Length) {}
                Dim bytesRead As Integer = responseStream.Read(buffer, 0, Length)
     
                While bytesRead > 0
                    writeStream.Write(buffer, 0, bytesRead)
                    bytesRead = responseStream.Read(buffer, 0, Length)
                End While
     
                responseStream.Close()
                writeStream.Close()
     
                Dim codeMessage As Integer = Convert.ToInt32(response.StatusCode)
     
                response.Close()
                FTP_Dowload = True
            Catch ex As Exception
                FTP_Dowload = False
            End Try
        End Function
     
        Public Function FTP_Del(ByVal FileToDel As String, ByVal User As String, ByVal Pass As String) As Boolean
            Dim request As FtpWebRequest = DirectCast(WebRequest.Create(FileToDel), FtpWebRequest)
            Try
                request.Method = WebRequestMethods.Ftp.DeleteFile
     
                request.Credentials = New NetworkCredential(User, Pass)
     
                Dim response As FtpWebResponse = DirectCast(request.GetResponse(), FtpWebResponse)
     
                Dim codeMessage As Integer = Convert.ToInt32(response.StatusCode)
     
                response.Close()
                ftp_Del = True
            Catch ex As Exception
                ftp_Del = False
            End Try
     
        End Function
    End Class
    Mais j'ai le même code d'erreur lors de l’exécution de "Dim requestStream As Stream = request.GetRequestStream()" dans FTP_Upload.



    Terme exacte de l'erreur:
    Le serveur distant a retourné une erreur : (550) Fichier non disponible (par exemple, fichier introuvable, accès impossible).

    Merci de votre aide

  2. #2
    Membre averti Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    929
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 929
    Points : 312
    Points
    312
    Par défaut
    J'ai essayé la fonction FTP_Del

    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
    Public Function FTP_Del(ByVal FileToDel As String, ByVal User As String, ByVal Pass As String) As Boolean
            Dim request As FtpWebRequest = DirectCast(WebRequest.Create(FileToDel), FtpWebRequest)
            Try
                request.Method = WebRequestMethods.Ftp.DeleteFile
     
                request.Credentials = New NetworkCredential(User, Pass)
     
                Dim response As FtpWebResponse = DirectCast(request.GetResponse(), FtpWebResponse)
     
                Dim codeMessage As Integer = Convert.ToInt32(response.StatusCode)
     
                response.Close()
                ftp_Del = True
            Catch ex As Exception
                ftp_Del = False
            End Try
     
        End Function
    Et j'ai exactement le même code d'erreur sur : Dim response As FtpWebResponse = DirectCast(request.GetResponse(), FtpWebResponse)

    FileToDel est = ftp://10.234.3.2/home/bin/Monfichier

    Si je tape sa dans l'explorateur : ftp://10.234.3.2/home/bin le fichier MonFichier est bien visible


    Une chose me chiffonne aussi c'est que dans l'explorateur il me demande pas de mot de passe. Alors que dans l'invite de commande après avoir taper ftp 10.234.3.2 il me demande les login et mot de passe.

  3. #3
    Membre averti Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    929
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 929
    Points : 312
    Points
    312
    Par défaut
    Je ne sais pas si j'ai débusqué un début de réponse.

    Lorsque je fait un ftp 10.234.3.2

    Je me retrouve dans le répertoire root et non sur la racine.

    Je viens de faire un essaie

    ftp 10.234.3.2
    Puis j'ai fait un "put" d'un fichier.
    Il se retrouve dans le répertoire root et non à la racine.

    A la racine j'ai plusieurs répertoires:

    dont:
    root
    et
    home

    et moi je veux aller dans home/bin

    Bon par contre si c'est l'explication je comprend pas du coup pourquoi dans l'explorer je vais bien au bon endroit lorsque je met ftp://10.234.3.2/home/bin

    Au niveau des fichiers ils doivent en plus s'installer dans différent répertoire.
    /home/bin/
    /home/etc/
    /home/htdocs/
    /home/mib/

    Je viens de voir le code source d'un logiciel en vb6 et effectivement il se connecte sur 10.234.3.2
    puis il est défini le répertoire de travaille et ensuite un envoie du fichier.

    Les répertoires sont crée avec les images de partition mais un contrôle de leur présence serait souhaitable.

  4. #4
    Membre averti Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    929
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 929
    Points : 312
    Points
    312
    Par défaut
    Ok j'ai trouvé mais il y a peut être plus propre.

    je rajoute un / dans la commande de connections.

    ftp://10.234.3.2//home/bin/Monfichier

    Et cela fonctionne et le ficheir est bien placé dans /home/bin/


    Je laisse encore sur non résolu si une âme charitable veux bien se pencher sur ce souci pour me dire si je fait les choses correctement.

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Upload parallelle de plusieurs fichiers sur même domain.
    Par Fabouney dans le forum Général Conception Web
    Réponses: 0
    Dernier message: 05/10/2009, 12h05
  2. [FTP] Récupération de fichier sur un serveur distant
    Par valouche dans le forum Langage
    Réponses: 15
    Dernier message: 06/03/2008, 10h30
  3. [FTP] Télécharger un fichier sur le serveur
    Par djflex68 dans le forum Langage
    Réponses: 1
    Dernier message: 21/01/2008, 21h08
  4. [FTP]Download un fichier sur le serveur
    Par bizet dans le forum ASP.NET
    Réponses: 1
    Dernier message: 29/08/2007, 15h13
  5. [FTP] liste de fichier sur un serveur ftp
    Par nicoaix dans le forum Langage
    Réponses: 9
    Dernier message: 22/12/2005, 12h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo