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 :

Progressbar avec FTP


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Technical Team Leader
    Inscrit en
    Avril 2010
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technical Team Leader
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2010
    Messages : 235
    Par défaut Progressbar avec FTP
    Bonjour,

    j'utilise ce code pour faire un upload et download de fichier sur un serveur FTP securisé:

    download :

    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
    Public Function downloadFTP(ByVal Cheminfile As String, ByVal URL As String, ByVal bk As String, ByVal pw As String, ByVal Er As String) As String
            Form1.ProgressBar1.Value = 0
     
            Dim requ As FtpWebRequest = Nothing
            Dim resp As FtpWebResponse = Nothing
            Dim respStrm As Stream = Nothing
            Dim fileStrm As FileStream = Nothing
            Dim filename As String
     
            Try
                requ = CType(WebRequest.Create(URL), FtpWebRequest)
                Application.DoEvents()
                requ.Credentials = New NetworkCredential(bk, pw)
     
                requ.Method = WebRequestMethods.Ftp.DownloadFile
                resp = CType(requ.GetResponse(), FtpWebResponse)
                respStrm = resp.GetResponseStream()
     
                filename = Path.GetFileName(requ.RequestUri.LocalPath)
     
                fileStrm = File.Create(Cheminfile & "\" & filename)
                Dim buff(1024) As Byte
                Dim bytesread As Integer = 0
     
                While (True)
                    bytesread = respStrm.Read(buff, 0, buff.Length)
                    Form1.ProgressBar1.Maximum = 100
                    Form1.ProgressBar1.Value += 20
                    If (bytesread = 0) Then Exit While
                    fileStrm.Write(buff, 0, bytesread)
                End While
                Er = "Download de "
     
            Catch ex As UriFormatException
     
                Er = ex.Message
     
            Catch ex As WebException
                Er = ex.Message
     
            Catch ex As IOException
                Er = ex.Message
            Finally
                If respStrm IsNot Nothing Then respStrm.Close()
                If fileStrm IsNot Nothing Then fileStrm.Close()
            End Try
     
            Return Er
     
     
        End Function
    er upload

    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
    Public Function uploadFTP(ByVal filename As String, ByVal URL As String, ByVal bk As String, ByVal pw As String, ByRef Er As String) As String
     
            Dim requ As FtpWebRequest = Nothing
            Dim resp As FtpWebResponse = Nothing
            Dim requStrm As Stream = Nothing
            Dim fileStrm As FileStream = Nothing
            Try
     
                requ = CType(WebRequest.Create(URL), FtpWebRequest)
                requ.Credentials = New NetworkCredential(bk, pw)
     
                requ.Method = WebRequestMethods.Ftp.UploadFile
                requ.Timeout = System.Threading.Timeout.Infinite
                requ.Proxy = Nothing
                requStrm = requ.GetRequestStream()
                Dim buff(2048) As Byte
                Dim bytesRead As Integer = 0
     
                fileStrm = File.OpenRead(filename)
                Do While (True)
                    bytesRead = fileStrm.Read(buff, 0, buff.Length)
                    If (bytesRead = 0) Then Exit Do
                    requStrm.Write(buff, 0, bytesRead)
                Loop
                requStrm.Close()
                resp = CType(requ.GetResponse(), FtpWebResponse)
                Er = "Upload de "
            Catch ex As UriFormatException
                Er = ex.Message
            Catch ex As IOException
                Er = ex.Message
            Catch ex As WebException
                Er = ex.Message
            Finally
                If resp IsNot Nothing Then resp.Close()
                If fileStrm IsNot Nothing Then fileStrm.Close()
                If requStrm IsNot Nothing Then requStrm.Close()
            End Try
            Return Er
        End Function
    je voudrais mettre un progressbar pour voir la progression mais je galère, je travail sur le while et rien n'a faire je n'arrive pas a coder la barre...

    pouvez-vous m'aider merci

  2. #2
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    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
     
    Public Function uploadFTP(ByVal filename As String, ByVal URL As String, ByVal bk As String, ByVal pw As String, ByRef Er As String) As String
     
            Dim requ As FtpWebRequest = Nothing
            Dim resp As FtpWebResponse = Nothing
            Dim requStrm As Stream = Nothing
            Dim fileStrm As FileStream = Nothing
       Try
     
            Dim requ As FtpWebRequest = Nothing
            Dim resp As FtpWebResponse = Nothing
            Dim requStrm As Stream = Nothing
            Dim fileStrm As FileStream = Nothing
            Try
                        requ = CType(WebRequest.Create(URL), FtpWebRequest)
                        requ.Credentials = New NetworkCredential(bk, pw)
     
                        requ.Method = WebRequestMethods.Ftp.UploadFile
                        requ.Timeout = System.Threading.Timeout.Infinite
                        requ.Proxy = Nothing
                        Dim requStrm As Stream = requ.GetRequestStream()
                        Dim fs As New FileStream(tmpfi, FileMode.Open)
                        Dim bytesRead As Integer = 0
                        Dim bytesSoFar As Long = 0
                        Dim buffer4 As Byte() = New Byte(2048) {}
                        While (MisMatchData(bytesRead, fs.Read(buffer4, 0, buffer4.Length))) <> 0
     
                                bytesSoFar += bytesRead
                                requStrm.Write(buffer4, 0, bytesRead)
                                Bgw.ReportProgress((bytesSoFar * 100) / fi.Length, "Uploading file : ...")
                        End While
                        fs.Close()
                        resp = CType(requ.GetResponse(), FtpWebResponse)
            Catch ex As UriFormatException
                Er = ex.Message
            Catch ex As IOException
                Er = ex.Message
            Catch ex As WebException
                Er = ex.Message
            Finally
                If resp IsNot Nothing Then resp.Close()
                If fileStrm IsNot Nothing Then fileStrm.Close()
                If requStrm IsNot Nothing Then requStrm.Close()
            End Try
            Return Er
        End Function
     
        Public Function MisMatchData(Of T)(ByRef target As T, ByVal value As T) As T
            target = value
            Return value
        End Function
     
        Private Sub Bgw_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles Bgw.ProgressChanged
              If Not e.progresspercentage > 100
                    Me.ProgressBar1.Value = e.ProgressPercentage
                    Me.text = e.userstate.tostring
                End If
        End Sub
    Voilà pour te permettre la gestion d'une barre de progression lors de l'Upload mais si tu recherches bien sur ce forum j'ai déjà posté 1 exemple très bien détaillé sur le sujet.

    NB 1 : n'oublies surtout pas de paramétré ton BackgroundWorker de facon qu'il accepte la gestion de la progression : WorkerReportsProgress=True

    NB 2: je n'ai pas débogué car je viens de rafistoler ton code sans EDI ...donc il est probable qu'il s'y soit glissé des incohérences ou erreurs mais l'idée est là !

    NB 3: ATtention à bien gérer également l'annulation lorsque tu te situes dans le parcours des bytes dans While et MisMatchData().


    A+

  3. #3
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Des liens qui contiennent des infos très intéressants ici :

    http://www.developpez.net/forums/d13...-gros-fichier/

    et là :

    http://www.developpez.net/forums/d13...non-bloquante/


    PS : me semblait bien que j'avais récemment rédigé un bon exemple ...

    A+

  4. #4
    Membre éclairé
    Homme Profil pro
    Technical Team Leader
    Inscrit en
    Avril 2010
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technical Team Leader
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2010
    Messages : 235
    Par défaut
    Merci bien je vais me pencher dessus et reviendrais vers toi...

  5. #5
    Membre éclairé
    Homme Profil pro
    Technical Team Leader
    Inscrit en
    Avril 2010
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technical Team Leader
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2010
    Messages : 235
    Par défaut
    je pige pas le fonctionnement... par contre je n'utilise pas de BackgroundWorker et je n'ai jamais utiliser cette fonction... j'utilise des Application.DoEvents() pour ne pas figer l'appli pendant le while... si je comprend bien le BackgroundWorker permet de gérer les pauses durant le fonctionnement...

    les fichiers que j'uploade ou download ne fond que 500 ko max pour les photos et 5mo max pour une base SQL..

    en fait si j'arrive a determiner la taille du fichier sur le serveur je pourrais boucler en fonction, non?

  6. #6
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Citation Envoyé par tijote Voir le message
    je pige pas le fonctionnement... par contre je n'utilise pas de BackgroundWorker et je n'ai jamais utiliser cette fonction... j'utilise des Application.DoEvents() pour ne pas figer l'appli pendant le while... si je comprend bien le BackgroundWorker permet de gérer les pauses durant le fonctionnement...

    les fichiers que j'uploade ou download ne fond que 500 ko max pour les photos et 5mo max pour une base SQL..

    en fait si j'arrive a determiner la taille du fichier sur le serveur je pourrais boucler en fonction, non?

    Bonjour tijote,

    Ce n'est pas faute d'avoir essayé de te renseigner sur ce composant (qui n'est pas une fonction !) !
    De plus si tu dis utiliser des Application.DoEvents pour ne pas geler ton appli et que tu crois que le composant BackgroundWorker ne sert qu'à faire des pauses alors je ne vois pas ce que tu veux qu'on essaye de t'expliquer ????

    Le composant BGW permet de faire des opérations de type asynchrones et de gérer ainsi les opérations de mises à jour d'interface (généralement une Progression), l'annulation du prosessus, .... la gestion des erreurs/d'annulation en fin de processus ...and so on........!

    Ce que tu ne comprends pas ce n'est pas que le composant BGW mais le fonctionnement de l'upload de data sur un serveur ........

    On ne boucle certainement pas sur ce qui se situe côté serveur....o_O


    Je pense que c'est de ce côté là qu'il faut que tu creuses.... reviens nous voir quand tu auras saisis le principe du flux de lecture et du flux d'écriture lors de l'hébergement des datas côté serveur.




    A+

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

Discussions similaires

  1. Problème avec FTP
    Par sebairo dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 26/07/2006, 12h09
  2. Configuration des droits pour samba avec ftp et www
    Par Alkmie dans le forum Réseau
    Réponses: 2
    Dernier message: 07/11/2004, 13h50
  3. ProgressBar avec plusieurs procédures
    Par elifqaoui dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 08/09/2002, 18h03

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