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

  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+

  7. #7
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 194
    Par défaut
    doevents est "interdit"

    la classe webclient doit pouvoir faire du dl et ul de file vers ftp de manière asynchrone avec event de progression
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    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
    ce que je pige pas c'est comment quantifier une longueur si on ne la connait pas en avance, après si le BGW est ce que je dois utilisé je me pencherais dessus c'est clair

  9. #9
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 194
    Par défaut
    Citation Envoyé par tijote Voir le message
    comment quantifier une longueur si on ne la connait pas en avance
    en effet ce n'est pas possible
    il faut d'abord demander la taille du fichier (quand c'est possible) pour faire un produit en croix
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  10. #10
    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
    ce que je pige pas c'est comment quantifier une longueur si on ne la connait pas en avance, après si le BGW est ce que je dois utilisé je me pencherais dessus c'est clair
    Je ne t'obliges pas à utiliser le BGW la classe WenClient comme l'a mentionné pol63 fait très bien le job aussi !

    Il ne s'agit pas de te préoccuper de quantifier la taille..... hola la la....

    Rappelles-moi un peu comment fonctionne une requête Web ?? Que se passe-t-il quand tu cliques sur une url ?

    Je vais te répondre moi-même :

    1- tu cliques sur une URL depuis ton navigateur
    2- Une requête (WebRequest) est constituée à partir de ta demande. Cette requête est un vulgaire fichier formaté avec un Header, un Content, qui contient les informations liées à ta config (navigateur, host, ...) et qui transite par le réseau !
    3- Le serveur distant génère dynamiquement la réponse que tu souhaites (WebResponse)..... c'est ici que tu obtiens la taille de ce que tu récupères comme contenu (RequestStream).

    .....etc.......

    Voilà pour le petit aperçu.

    Allez un petit tuto pour la route :
    http://www.devtoolshed.com/content/c...e-progress-bar


    A+

  11. #11
    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, je regarde ça demain

  12. #12
    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
    Effectivement je ne connaissait pas backgroundWorker donc il permet lors d'opérations longues d'utiliser un thread séparé et dédié et ainsi éviter un freeze de l'interface utilisateur.

    bon j'ai donc créer le bgw et j'ai mis le WorkerReportsProgress à true..

    j'ai un peu modifier le code car j'avais des erreurs sur des variables...

    J'ai un bloquage sur
    resp = CType(requ.GetResponse(), FtpWebResponse)
    pas de message d'erreur ca bloque et rien

    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 uploadFTP2(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 fs As New FileStream(filename, 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) / fs.Length, "Uploading file : " & filename)
                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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Public Function MisMatchData(Of T)(ByRef target As T, ByVal value As T) As T
            target = value
            Return value
        End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        Private Sub Bgw_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles Bgw.ProgressChanged
            If Not e.ProgressPercentage > 100 Then
                Me.ProgressBar1.Value = e.ProgressPercentage
                Me.Text = e.UserState.ToString
            End If
        End Sub

  13. #13
    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
    Bon j'ai ouvert un de mes projets (http://wallace87000.upd.fr/M8FU.exe) dans lequel j'utilise ce corps de fonction d'Upload avec le composant BackgroundWorker :

    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
     
                Dim reqFTP1 As FtpWebRequest
                Dim fi1 As New FileInfo("YourFilePath")
                reqFTP1 = DirectCast(FtpWebRequest.Create(New Uri("YourFTP_URL")), FtpWebRequest)
                reqFTP1.Credentials = New NetworkCredential("YourFtpUserName","YourFtpUserPwd")
                reqFTP1.KeepAlive = False
                reqFTP1.Method = WebRequestMethods.Ftp.UploadFile
                reqFTP1.UseBinary = True
                reqFTP1.ContentLength = fi1.Length
     
                Dim requestStream As Stream = reqFTP1.GetRequestStream()
                Dim fs As New FileStream("YourFilePath", FileMode.Open, FileAccess.Read, FileShare.Read)
                Dim bytesRead As Integer = 0
                Dim bytesSoFar As Long = 0
                Dim buffer4 As Byte() = New Byte(10239) {}
                While (MisMatchData(bytesRead, fs.Read(buffer4, 0, buffer4.Length))) <> 0
                    Try
                        bytesSoFar += bytesRead
                        requestStream.Write(buffer4, 0, bytesRead)
                        BGW.ReportProgress((bytesSoFar * 100) / fi1.Length, "Hébergement du fichier : " & New FileInfo("YourFilePath").Name)
                    Catch ex As Exception
                        requestStream.Dispose()
                        fs.Dispose()
                        GC.Collect()
                        Exit Sub
                    End Try
                End While
                fs.Close()
                requestStream.Close()
    J'espère pour le coups que cela t'aidera.

    Petites questions au passage :

    Le FTP sur lequel tu tentes d'héberger est à toi ? Si oui, as-tu déjà paramétré un client FTP ?
    Cela fonctionne-t-il et surtout l'URL que tu utilises te permet-elle lorsque tu la tapes dans la barre d'adresse de ton navigateur de t'inviter à entrer tes identifiants de connexion manuellement ?


    A+

  14. #14
    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
    oui en faite j’héberge avec pureftp une appli linux et oui je peux me connecter via filezilla ou internet explorer avec mes identifiants... j'ai monté un serveur avec un raspberry

    mon appli fonctionne déjà en upload et download.. mais je voulais rajouter un progressbar pour voir l’état... c'est vrai que j'utilisais Application.DoEvents() pour éviter un petit freeze dans la boucle et j'ai compris que le bgw est adapter et sert a cela, mon application était geler pendant 2 seconde...

    j’avoue que j'ai un peux de mal a comprendre le fonctionnement, j'ai fais ce code histoire de comprendre un peu, je lance le processus en cliquant sur la progressbar, c'est pour un test:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub ProgressBar1_Click(sender As Object, e As EventArgs) Handles ProgressBar1.Click
            bgw.RunWorkerAsync()
        End Sub
     
        Private Sub bgWorker_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bgw.DoWork
            My.Computer.Network.UploadFile("C:\Pict\b4.jpg", "ftp://xx.xx.xxx.x/b4.jpg", "user", "mdp", True, 5000)
        End Sub
     
        Private Sub Bgw_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bgw.ProgressChanged
            If Not e.ProgressPercentage > 100 Then
                Me.ProgressBar1.Value = e.ProgressPercentage
            End If
        End Sub
    ma progresse bar s'augmente bien...

    je vais me pencher sur ton code, faut que j'y arrive lol, merci pour ton aide

    j'heberge un serveur
    mumble taffs.fr:21074
    password: taff
    si ça te dis de passer...

  15. #15
    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
    pour l'upload c'est nickel ça fonctionne il me reste plus que le download maintenant

  16. #16
    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
    pour l'upload c'est nickel ça fonctionne il me reste plus que le download maintenant
    Don pour le coups tu utilises quoi comme fonction ? La classe FTPWebrequest ou la classe Network ?

  17. #17
    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
    j'utilise la classe FtpWebRequest... avec ton code

  18. #18
    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
    par contre là mon fichier n'est pas sur le pc, il faut que je fasse une interrogation? pour connaitre le fi1.Length...

  19. #19
    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 bloque là

    je fais
    requ.Method = WebRequestMethods.Ftp.GetFileSize
    sur mon fichier afin de connaitre sa taille pour mettre a jour le bgw :
    bgw.ReportProgress((bytesSoFar * 100) / response.ContentLength, "Téléchargement du fichier : " & filename)
    mais j'ai une erreur (Impossible d'envoyer un corps de contenu avec ce type de verbe.) sur:
    Dim requestStream As Stream = requ.GetRequestStream()
    voici le code:

    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 Function downloadFTP(ByVal Cheminfile As String, ByVal URL As String, ByVal bk As String, ByVal pw As String, ByVal Er As String) As String
     
            Dim requ As FtpWebRequest
            Dim filename As String
     
            requ = DirectCast(FtpWebRequest.Create(New Uri(URL)), FtpWebRequest)
            requ.Credentials = New NetworkCredential(bk, pw)
            requ.KeepAlive = False
            requ.Method = WebRequestMethods.Ftp.DownloadFile
            requ.UseBinary = True
     
            filename = Path.GetFileName(requ.RequestUri.LocalPath)
     
            requ.Method = WebRequestMethods.Ftp.GetFileSize
            Dim response As FtpWebResponse = DirectCast(requ.GetResponse(), FtpWebResponse)
     
            Dim fs As FileStream = File.Create(Cheminfile & "\" & filename)
     
            Dim requestStream As Stream = requ.GetRequestStream()
            Dim buffer4 As Byte() = New Byte(10239) {}
            Dim bytesread As Integer = 0
            Dim bytesSoFar As Long = 0
     
            While (MisMatchData(bytesread, fs.Read(buffer4, 0, buffer4.Length))) <> 0
                Try
                    bytesSoFar += bytesread
                    requestStream.Write(buffer4, 0, bytesread)
                    bgw.ReportProgress((bytesSoFar * 100) / response.ContentLength, "Téléchargement du fichier : " & filename)
                    Er = "Download de "
                Catch ex As Exception
                    Er = ex.Message
                    requestStream.Dispose()
                    fs.Dispose()
                    GC.Collect()
                    Return Er
                    Exit Function
                End Try
            End While
     
            Return Er
     
     
        End Function
    la boucle aussi est invalide :
    While (MisMatchData(bytesread, fs.Read(buffer4, 0, buffer4.Length))) <> 0

  20. #20
    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
    Quand tu UP :

    Tu recuperes la taille de ton fichier afin de travailler dans 1 filestream.
    A ce moment ta requete contient header+Content.

    Quand tu DL :

    Ta requete est constituée uniquement d'1 header.
    C'est le serveur distant qui t envoi le Content, ce qui veut dire que tu dois récupérer 1 flux de reponse (getResponse) et pour obtenir la taille il faut travailler avec "GetResponseStream". Ensuite tu bosses dans 1 FileStream pour incrementer la progressbar.


    Ca c'est le raisonnement avant de taper les lignes de codes d'ou l'interet de faire un peu d algo pour avoir une vue globale de ce que tu dois implementer.

    Allez bon codage mec.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

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