Class de téléchargement http avec gestion de resume, gestion de proxy, info de progression et debit moyen.

Soyez le premier à donner votre avis sur cette source.

Vue 11 413 fois - Téléchargée 1 260 fois


Description

Une petite classe de téléchargement de fichier avec gestion de progression, resume, et proxy.
J'ai deja posté un code pour télécharger un fichier via vb.net mais il ne permettait
ni le resume, ni de connaitre l'avancement du download.
Celui ci donc, permet de reprendre un téléchargement mis en pause ou arreté par erreur (Resume) et de connaitre l'avancement du téléchargement via une progressbar, un pourcentage, etc (voir zip exemple)

Source / Exemple :


Imports System.Net

Public Class HBDownloader

    Public Event start_dl(ByVal totalfilelen As Integer, ByVal resumepos As Integer, ByVal timestart As Integer)
    Public Event progress(ByVal actual_pos As Integer)
    Public Event end_dl(ByVal actual_pos As Integer)

    Dim b As Boolean
    Dim bresume As Boolean
    Dim readstr As IO.Stream
    Dim lenfile As Long
    Dim bytesarr(102400) As Byte
    Dim timestart As Integer
    Dim tmppos As Integer
    Dim posresume As Integer
    Dim pathname As String
    Dim urlz As String

    Sub start(ByVal pathstr As String, ByVal strurl As String, ByVal isresume As Boolean)
        b = True
        bresume = isresume
        timestart = 0
        pathname = pathstr
        urlz = strurl
        Dim threadz As New System.Threading.Thread(AddressOf thread_launch)
        threadz.Start()
    End Sub

    Sub thread_launch()
        Get_file(urlz, pathname)
    End Sub

    Sub stop_dl()
        b = False
    End Sub

    Sub Get_file(ByVal fileurl As String, ByVal filepath As String, Optional ByVal proxy As String = Nothing, Optional ByVal proxyport As Integer = Nothing)
        If proxy <> Nothing And proxyport <> Nothing Then
            Dim hproxy As WebProxy
            hproxy = New WebProxy(proxy, proxyport)
            GlobalProxySelection.Select = hproxy
        End If
        Dim hwebrequest As System.Net.HttpWebRequest = System.Net.WebRequest.Create(fileurl)
        If bresume = True Then
            posresume = FileLen(filepath)
            tmppos = posresume
            hwebrequest.AddRange(CInt(tmppos))
        End If
        Dim hwebresponse As System.Net.HttpWebResponse = hwebrequest.GetResponse
        readstr = hwebresponse.GetResponseStream
        lenfile = hwebresponse.ContentLength + tmppos
        timestart = Environment.TickCount
        Dim tmplen As Integer
        tmplen = 2
        b = True
        RaiseEvent start_dl(lenfile, posresume, timestart)
        Do While tmplen > 0
            If b = False Then Exit Do
            tmplen = readstr.Read(bytesarr, 0, 102400)
            tmppos += tmplen
            Dim filesave As New IO.FileStream(filepath, IO.FileMode.Append, IO.FileAccess.Write)
            filesave.Write(bytesarr, 0, tmplen)
            filesave.Close()
            RaiseEvent progress(tmppos)
            System.Threading.Thread.Sleep(1)
        Loop
        RaiseEvent end_dl(tmppos)
        readstr.Close()
    End Sub

End Class

Conclusion :


Commentaires pliz!

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
97
Date d'inscription
vendredi 22 octobre 1999
Statut
Membre
Dernière intervention
13 juin 2016
1
Je veins de tester le programme sur Visual Studio 2010 (Express), la convertion fonctionne. Mais pour faire tourner la démonstration de la Classe, il faut effectuer quelques modifications dans l'utilisation du Thread, dont j'avoue ne pas connaitre en détail le fonctionnement du Threading. Il y a peu-être mieux que ce que je propose.

dans la partie déclarion de Form1, ajouter :
Delegate Sub SetDownStartCallback(ByVal totalfilele As Integer, ByVal resumepos As Integer, ByVal timestart As Integer)
Delegate Sub SetDownProgressCallback(ByVal actual_pos As Integer)
Delegate Sub SetDownEndCallback(ByVal actual_pos As Integer)

Dans la fonction download_start_dl, modifier "pgbar.Maximum =..." par :
If pgbar.InvokeRequired Then
Dim d As New SetDownStartCallback(AddressOf downloadz_start_dl)
Me.Invoke(d, New Object() {totalfilelen, resumepos, timestart})
Else
pgbar.Maximum = totalfilelen
End If

Dans la fonction downloadz_progress, modifier "pgbar.Value =..." par :
If pgbar.InvokeRequired Then
Dim d As New SetDownProgressCallback(AddressOf downloadz_progress)
Me.Invoke(d, New Object() {actual_pos})
Else
pgbar.Value = actual_pos
End If

Dans la fonction downloadz_end_dl, modifier "lblinfo.Text =..." par :
If pgbar.InvokeRequired Then
Dim d As New SetDownEndCallback(AddressOf downloadz_end_dl)
Me.Invoke(d, New Object() {actual_pos})
Else
lblinfo.Text = "Téléchargement effectué à " & curpercent & "% " & vbCrLf & vbCrLf & _
"Temps restant estimé : " & curremain & " secondes" & vbCrLf & vbCrLf & _
actual_pos & " sur " & lenfile & " octets téléchargés " & vbCrLf & vbCrLf & _
curko & " sur " & lenfileko & " kilo octets téléchargés " & vbCrLf & vbCrLf & _
tmpspeed & " Ko/sc"
End If

Suite à l'erreur de compilattion, mes modifications sont issues de la lecture des explications de l'aide Microsoft : http://msdn.microsoft.com/...
Messages postés
8
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
5 septembre 2008

Bonjour et bravo pour cette source qui me paraît très intéressante !
J'utilise Visual Studio 2003, n'ayaht pas les moyens de racheter une licence de VS2005,c'est pour cela que je post ici et non pas sur le topic consacré à la version .Net2
Je compte me servir de cette source pour faire du téléchargement de gros fichiers (plusieurs Go), et j'aurais voulu savoir si cette classe permettait de gérer les pseudos microcoupures que l'on voit très souvent en utilisant un téléchargement "traditionnel" (sans utiliser de logiciel de téléchargement), comme par exemple en téléchargement un gros fichier, le téléchargement ne plante pas mais le fichier est corrompu.
Merci d'avance pour votre/vos réponse.
Bonne année !
François.
Messages postés
939
Date d'inscription
vendredi 25 octobre 2002
Statut
Membre
Dernière intervention
27 janvier 2009
1
ouais.. on va pas arreter le hs ici, mp moi si tu veux des tutos sur les regex ou pour exposer ton problème plus concrètement
Messages postés
1447
Date d'inscription
jeudi 2 novembre 2000
Statut
Membre
Dernière intervention
23 septembre 2007
1
Mon souci d'expressions régulières c'est déjà pour détecter les urls de vidéos dans une page web. J'ai posté une question pour ça auquel je n'ai pas encore eu de réponses psotivies mais c'est aussi pour savoir manipuler les expressions régulière car j'ai beau chercher des tutos ou regarder le MSDN etc... lorsque j'essaye de faire une expressions régulières en fonction des explications ca marche jamais !
Messages postés
939
Date d'inscription
vendredi 25 octobre 2002
Statut
Membre
Dernière intervention
27 janvier 2009
1
ah oui, nouvelle version, en .net2 ici :
http://www.vbfrance.com/code.aspx?ID=41850
Afficher les 16 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.