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!
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.