Accueil > > > TÉLÉCHARGEMENT D'UN FICHIER V1.1
TÉLÉCHARGEMENT D'UN FICHIER V1.1
Information sur la source
Description
Une OCX pour télécharger un fichier avec Inet. un evenement vous permet de recuperer la taille deja telechargee, la taille totale, le pourcentage, la vitesse (quoiqu'il y a quelques progres a faire de ce cote) Un autre le status du téléchargement. Le code est commenté et contient un projet de test. Vous pouvez retoucher le code et l'inclure ds votre projet, ajout le controle, ou ajouter l'ocx (je sais, c chiant a distribuer ;-)
Source
- 'Control : OCX_Download
- 'Auteur : Emmanuel Bouillon
- 'E-mail : ebouillon@ifrance.com
- 'Page perso : http://informatique.monhttp.com/
- 'Dernière MAJ : 06/03/2002
- 'Version Act : 1.1
- '
- 'V 1.1:
- ' -- Support du resuming (ajout d'un argument a la fonction Download)
- ' -- un bug corrigé
- '
- 'A venir:
- ' -- Une meilleur gestion de la vitesse
- ' -- Le temps
- ' -- Un controle d'erreur
-
- 'J'ai rajouté plusieurs boucles avec Inet.StillExecuting
- 'pour etre sur que le control n'est pas en train de faire qqc
-
- 'Génere une erreur si il y a une variable inconnue
- Option Explicit
-
- 'Défini les evenements
- Public Event Progress(Percent As Byte, Taille_Recue As Long, Taille_Totale As Long, Vitesse As Long)
- Public Event ChangementStatus(State As String)
-
- Const Chunk_Size = 1024
- Const Retour = 4096
-
- Dim Pourcent As Byte
- Dim Taille_Recue As Long
- Dim Taille_Totale As Long
- Dim Vitesse As Long
- Dim LastTailleRecue As Long
- Dim File As Integer
- Dim StrHeader
- Dim Msg
- Dim Data() As Byte
-
- 'Procedure de téléchargement
- Public Sub Download(Source As String, Destination As String, Optional AutoResume As Boolean = True)
- 'En cas d'erreur, aller a l'etiquette "ErreurDownload"
- 'On Error GoTo ErreurDownload
-
- 'Initialise les variables
- Pourcent = 0
- Taille_Recue = 0
- Taille_Totale = 0
- Vitesse = 0
- LastTailleRecue = 0
- File = 0
- StrHeader = ""
-
- 'Envoi l'evenement "ChangementStatus" avec pour argument le Status
- RaiseEvent ChangementStatus("Initialisation...")
- Lbl_Status = "Initialisation..."
- RaiseEvent Progress(0, 0, 1, 0)
-
- 'Attends qu'il ai terminé ses operations
- While Inet.StillExecuting
- DoEvents
- Wend
-
- 'Initialise le controle Internet Transfert
- Inet.URL = Source
- Inet.Execute , "GET"
-
- 'Attends qu'il ai terminé ses operations
- While Inet.StillExecuting
- DoEvents
- Wend
-
- Lbl_Source = "Source : " & Source
- Lbl_Destination = "Destination : " & Destination
- RaiseEvent ChangementStatus("Recherche de la taille du fichier...")
- Lbl_Status = "Recherche de la taille du fichier..."
-
- 'Utilise la fonction Taille pour récuperer la taille du fichier
- Taille_Totale = Taille(Source)
- Bar.Max = Taille_Totale
- Taille_Recue = 0
- Bar.Value = Taille_Recue
-
- RaiseEvent ChangementStatus("Ouverture du fichier de destination...")
- Lbl_Status = "Ouverture du fichier de destination..."
-
- 'Cherche un no de fichier libre
- File = FreeFile()
-
- 'Ouverture du fichier de destination
- Open Destination For Binary Access Write As #File
-
- 'Si le fichier de destination existe deja :
- If FileLen(Destination) > 4096 Then
- If AutoResume = False Then Msg = MsgBox("Le fichier de destination existe déja, voulez-vous continuer le transfert ?", vbYesNoCancel, "Le fichier de destination existe déja")
- 'Si AutoResume est sur False, on demande si il faut reprendre le téléchargement
- If Msg = vbNo Then 'Si non, on ferme le fichier de destination,
- Close #File 'On le supprime et on le créé
- Kill Destination
- Open Destination For Binary Access Write As #File
- End If
-
- If Msg = vbCancel Then 'Si "cancel",
- GoTo Fin 'on arrete le téléchargement
- End If
- 'Si AutoResume est sur True
- 'ou si on a chosit de continuer
- 'le téléchargement...
- If AutoResume = True Or Msg = vbYes Then
- RaiseEvent ChangementStatus("Reprise du téléchargement...")
- Taille_Recue = FileLen(Destination)
- Seek #File, Taille_Recue + 1
- Inet.Execute , "GET", , "Range: bytes=" & CStr(Taille_Recue) & "-" & vbCrLf
- End If
- End If
-
- 'Attends qu'il ai terminé ses operations
- While Inet.StillExecuting
- DoEvents
- Wend
-
- 'Debut du téléchargement
- RaiseEvent ChangementStatus("Téléchargement en cours...")
- Lbl_Status = "Téléchargement en cours..."
- Timer.Enabled = True 'Activation du Timer (pour la vitesse)
- Do
- DoEvents 'Télécharge un bloc de données
- Data = Inet.GetChunk(Chunk_Size, icByteArray)
- Put #File, , Data 'Les enregistre dans le fichier
- Taille_Recue = Taille_Recue + UBound(Data, 1) + 1
- Bar.Value = Taille_Recue 'Met a jour la bar de progression
- Lbl_State = Taille_Recue & " / " & Taille_Totale & " - " & Pourcent & " %"
- Pourcent = Round(Taille_Recue / Taille_Totale * 100)
- 'Calcule la progression
- RaiseEvent Progress(Pourcent, Taille_Recue, Taille_Totale, Vitesse)
-
- Loop While UBound(Data, 1) > 0
- 'Ferme le fichier
- Close #File
-
- Timer.Enabled = False
- RaiseEvent ChangementStatus("Téléchargement terminé")
- Lbl_Status = "Téléchargement terminé"
- Exit Sub
-
- 'En cas d'erreur
- ErreurDownload:
- On Error Resume Next
- If MsgBox("Erreur " & Err.Number & " - " & Err.Description & vbCrLf & "Effacer le fichier ?", vbYesNo, "Le téléchargement a échoué") = vbYes Then Kill Destination
- Fin:
- RaiseEvent ChangementStatus("Une erreur c'est produite !")
- Lbl_Status = "Une erreur c'est produite !"
- Close #File
- End Sub
-
- 'Defini la vitesse
- Private Sub Timer_Timer()
- Vitesse = (Taille_Recue - LastTailleRecue) * 2
- LastTailleRecue = Taille_Recue
- End Sub
-
- 'Retrouve la taille d'un fichier sur internet
- 'Cette fonction peut être appelée sans necessiter
- 'un téléchargement, car elle utilise un control Inet
- 'différent
- Public Function Taille(URL As String) As Long
-
- Inet_Taille.URL = URL
- Inet_Taille.Execute , "GET"
-
- 'Fait patienter le control Inet jusqu'a ce qu'il
- 'ait terminé ses taches
- While Inet_Taille.StillExecuting
- DoEvents
- Wend
-
- 'Cherche la taille
- StrHeader = Inet_Taille.GetHeader("Content-Length")
- Taille = Val(StrHeader)
-
- End Function
-
- 'Arrete les operations des controls Inet en cours
- Public Sub Cancel()
- On Error Resume Next
- Inet.Cancel
- Inet_Taille.Cancel
- RaiseEvent ChangementStatus("Téléchargement interrompu")
- Lbl_Status = "Téléchargement interrompu"
- Timer.Enabled = False
- End Sub
-
'Control : OCX_Download
'Auteur : Emmanuel Bouillon
'E-mail : ebouillon@ifrance.com
'Page perso : http://informatique.monhttp.com/
'Dernière MAJ : 06/03/2002
'Version Act : 1.1
'
'V 1.1:
' -- Support du resuming (ajout d'un argument a la fonction Download)
' -- un bug corrigé
'
'A venir:
' -- Une meilleur gestion de la vitesse
' -- Le temps
' -- Un controle d'erreur
'J'ai rajouté plusieurs boucles avec Inet.StillExecuting
'pour etre sur que le control n'est pas en train de faire qqc
'Génere une erreur si il y a une variable inconnue
Option Explicit
'Défini les evenements
Public Event Progress(Percent As Byte, Taille_Recue As Long, Taille_Totale As Long, Vitesse As Long)
Public Event ChangementStatus(State As String)
Const Chunk_Size = 1024
Const Retour = 4096
Dim Pourcent As Byte
Dim Taille_Recue As Long
Dim Taille_Totale As Long
Dim Vitesse As Long
Dim LastTailleRecue As Long
Dim File As Integer
Dim StrHeader
Dim Msg
Dim Data() As Byte
'Procedure de téléchargement
Public Sub Download(Source As String, Destination As String, Optional AutoResume As Boolean = True)
'En cas d'erreur, aller a l'etiquette "ErreurDownload"
'On Error GoTo ErreurDownload
'Initialise les variables
Pourcent = 0
Taille_Recue = 0
Taille_Totale = 0
Vitesse = 0
LastTailleRecue = 0
File = 0
StrHeader = ""
'Envoi l'evenement "ChangementStatus" avec pour argument le Status
RaiseEvent ChangementStatus("Initialisation...")
Lbl_Status = "Initialisation..."
RaiseEvent Progress(0, 0, 1, 0)
'Attends qu'il ai terminé ses operations
While Inet.StillExecuting
DoEvents
Wend
'Initialise le controle Internet Transfert
Inet.URL = Source
Inet.Execute , "GET"
'Attends qu'il ai terminé ses operations
While Inet.StillExecuting
DoEvents
Wend
Lbl_Source = "Source : " & Source
Lbl_Destination = "Destination : " & Destination
RaiseEvent ChangementStatus("Recherche de la taille du fichier...")
Lbl_Status = "Recherche de la taille du fichier..."
'Utilise la fonction Taille pour récuperer la taille du fichier
Taille_Totale = Taille(Source)
Bar.Max = Taille_Totale
Taille_Recue = 0
Bar.Value = Taille_Recue
RaiseEvent ChangementStatus("Ouverture du fichier de destination...")
Lbl_Status = "Ouverture du fichier de destination..."
'Cherche un no de fichier libre
File = FreeFile()
'Ouverture du fichier de destination
Open Destination For Binary Access Write As #File
'Si le fichier de destination existe deja :
If FileLen(Destination) > 4096 Then
If AutoResume = False Then Msg = MsgBox("Le fichier de destination existe déja, voulez-vous continuer le transfert ?", vbYesNoCancel, "Le fichier de destination existe déja")
'Si AutoResume est sur False, on demande si il faut reprendre le téléchargement
If Msg = vbNo Then 'Si non, on ferme le fichier de destination,
Close #File 'On le supprime et on le créé
Kill Destination
Open Destination For Binary Access Write As #File
End If
If Msg = vbCancel Then 'Si "cancel",
GoTo Fin 'on arrete le téléchargement
End If
'Si AutoResume est sur True
'ou si on a chosit de continuer
'le téléchargement...
If AutoResume = True Or Msg = vbYes Then
RaiseEvent ChangementStatus("Reprise du téléchargement...")
Taille_Recue = FileLen(Destination)
Seek #File, Taille_Recue + 1
Inet.Execute , "GET", , "Range: bytes=" & CStr(Taille_Recue) & "-" & vbCrLf
End If
End If
'Attends qu'il ai terminé ses operations
While Inet.StillExecuting
DoEvents
Wend
'Debut du téléchargement
RaiseEvent ChangementStatus("Téléchargement en cours...")
Lbl_Status = "Téléchargement en cours..."
Timer.Enabled = True 'Activation du Timer (pour la vitesse)
Do
DoEvents 'Télécharge un bloc de données
Data = Inet.GetChunk(Chunk_Size, icByteArray)
Put #File, , Data 'Les enregistre dans le fichier
Taille_Recue = Taille_Recue + UBound(Data, 1) + 1
Bar.Value = Taille_Recue 'Met a jour la bar de progression
Lbl_State = Taille_Recue & " / " & Taille_Totale & " - " & Pourcent & " %"
Pourcent = Round(Taille_Recue / Taille_Totale * 100)
'Calcule la progression
RaiseEvent Progress(Pourcent, Taille_Recue, Taille_Totale, Vitesse)
Loop While UBound(Data, 1) > 0
'Ferme le fichier
Close #File
Timer.Enabled = False
RaiseEvent ChangementStatus("Téléchargement terminé")
Lbl_Status = "Téléchargement terminé"
Exit Sub
'En cas d'erreur
ErreurDownload:
On Error Resume Next
If MsgBox("Erreur " & Err.Number & " - " & Err.Description & vbCrLf & "Effacer le fichier ?", vbYesNo, "Le téléchargement a échoué") = vbYes Then Kill Destination
Fin:
RaiseEvent ChangementStatus("Une erreur c'est produite !")
Lbl_Status = "Une erreur c'est produite !"
Close #File
End Sub
'Defini la vitesse
Private Sub Timer_Timer()
Vitesse = (Taille_Recue - LastTailleRecue) * 2
LastTailleRecue = Taille_Recue
End Sub
'Retrouve la taille d'un fichier sur internet
'Cette fonction peut être appelée sans necessiter
'un téléchargement, car elle utilise un control Inet
'différent
Public Function Taille(URL As String) As Long
Inet_Taille.URL = URL
Inet_Taille.Execute , "GET"
'Fait patienter le control Inet jusqu'a ce qu'il
'ait terminé ses taches
While Inet_Taille.StillExecuting
DoEvents
Wend
'Cherche la taille
StrHeader = Inet_Taille.GetHeader("Content-Length")
Taille = Val(StrHeader)
End Function
'Arrete les operations des controls Inet en cours
Public Sub Cancel()
On Error Resume Next
Inet.Cancel
Inet_Taille.Cancel
RaiseEvent ChangementStatus("Téléchargement interrompu")
Lbl_Status = "Téléchargement interrompu"
Timer.Enabled = False
End Sub
Conclusion
V 1.1 : -- Support du resuming (ajout d'un arg a la fonction Download -- un bug corrigé
A venir : -- Une meilleur gestion de la vitesse -- Le temps -- Un controle d'erreur
Merci a Mad Vinz pour son aide sur le forum newscs.viendez.com (j'me debrouillais pas avec les OCX)
Sources du même auteur
Sources de la même categorie
Commentaires et avis
|
Derniers Blogs
PAS D'INTELLITRACE SUR MON SITE WEB DANS IIS !PAS D'INTELLITRACE SUR MON SITE WEB DANS IIS ! par Etienne Margraff
J'ai récemment eu un problème pour obtenir l'intelliTrace sur un site web dans IIS. Il n'y avait pas de message d'erreur, rien dans le journal d'évènement Windows, et après 3 appels à une voyante, 2 visites chez un marabou, j'ai failli me résign...
Cliquez pour lire la suite de l'article par Etienne Margraff OFFICE 365 - SHAREPOINT ONLINE, QUELQUES LIMITATIONSOFFICE 365 - SHAREPOINT ONLINE, QUELQUES LIMITATIONS par junarnoalg
De nombreuses entreprises font le choix de SharePoint Online, service fourni au travers de l'offre de Microsoft Office 365. S'il est vrai que ce choix apporte un grand nombre d'avantages; rapidité de mise en œuvre, disponibilité, large couvertu...
Cliquez pour lire la suite de l'article par junarnoalg PRéSENTATION DES API REST DE WINDOWS AZURE : LISTER LES COMPTES DE STORAGEPRéSENTATION DES API REST DE WINDOWS AZURE : LISTER LES COMPTES DE STORAGE par richardc
http://www.c2idotnet.com/articles/presentation-des-api-rest-de-windows-azure-lister-les-comptes-de-storage
Désolé pour "toto", mais c2i existait avant blogs.developpeur.org et c'est mon site "officiel" ;-) ...
Cliquez pour lire la suite de l'article par richardc [HTML5] SLIDES ET DéMOS : AUTOUR DU W3C , NOUVEAUX STANDARDS ET WEB MOBILE (LILLE)[HTML5] SLIDES ET DéMOS : AUTOUR DU W3C , NOUVEAUX STANDARDS ET WEB MOBILE (LILLE) par Gio
Très bonne après-midi passée lors cette conférence avec le W3C, organisée par L' Inria sur les nouveaux standards, ce Mardi 14 Février, on sent vraiment que çà bosse au W3C, et l'avenir est très très prometteur pour le HTML5, notamment ...
Cliquez pour lire la suite de l'article par Gio
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|