begin process at 2012 02 16 21:13:46
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Réseau & Internet

 > TÉLÉCHARGEMENT D'UN FICHIER V1.1

TÉLÉCHARGEMENT D'UN FICHIER V1.1


 Information sur la source

Note :
9,5 / 10 - par 14 personnes
9,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Réseau & Internet Niveau :Initié Date de création :03/03/2002 Date de mise à jour :06/03/2002 22:15:59 Vu / téléchargé :9 345 / 1 583

Auteur : DuncanIdaho

Ecrire un message privé
Site perso
Commentaire sur cette source (26)
Ajouter un commentaire et/ou une note

 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)  

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec une capture FORM RECTANGULAIRE AVEC BORDS ARRONDIS
Source avec Zip SLEEP - FAIRE CROIRE KE VOTRE ORDINATEUR BOSSE ;)

 Sources de la même categorie

Source avec Zip Source avec une capture GESTIONNAIRE DE TÉLÉCHARGEMENT, AVEC REPRISE ET MULTITHREADI... par Madx23
Source avec Zip Source avec une capture CONVERTIR DU TEXTE RTF EN CODE HTML ET VICE-VERSA par vicosta
Source avec Zip Source avec une capture DICTIONAIRE TEXT/AUDIO/VISUELLE ANGLAIS AVEC WEBBROWSER CONT... par majnounmajda
Source avec Zip Source .NET (Dotnet) NSLOOKUP EN VB.NET OU COMMENT FAIRE UNE REQÛETE DNS EN PRÉCI... par ShareVB
Source avec Zip Source avec une capture MINI SEVEUR HTTP AVEC INTERFACE GRAPHIQUE ET IMPLÉMENTATIONS... par lemout

Commentaires et avis

Commentaire de Nox le 04/03/2002 00:57:35

Une fois avoir résolu les 1000 et 1 erreurs de chargement de ton prog... c'est bien!
mais tas du travail pour arriver à la cheville de Getright :p

Avec un support de Resuming il serait tres puissant

Voila enfin une source qui manquait sur le site!
...je sais yen a une mais pas ak de progressbar ;)

Commentaire de max12 le 04/03/2002 02:01:35 administrateur CS

Oué c'est pas mal 10/10

Commentaire de DuncanIdaho le 04/03/2002 08:16:09

Je sais, je cherchais une source qui fasse sa, ms comme je l'ai pas trouvée, je l'ai faite :-)

je vais essayer de faire un support de resuming, et un control d'erreur...

;)

Commentaire de DuncanIdaho le 07/03/2002 17:50:59

voila, support du resuming ajouté... normalement sans bugs ;-)

Commentaire de diablotin le 11/07/2002 18:03:07

je l'aime bien mais il refait un fichier non original ton programme est bon mais il a des amélioration afaire mais le but est la pour sa je te donne 8/10

Commentaire de DuncanIdaho le 11/07/2002 21:53:25

? il telecharge pas bien ? :(

Commentaire de inconnuanonyme le 08/05/2003 20:46:57

lé bien :)

Commentaire de fpinchon le 18/05/2003 09:44:17

super ton ocx notamment pour la barre de progression et la taille du fichier.
une question : comment le transformer pour envoyer un fichier ? est-ce possible en substituant la commande Get par Put.
amities ;
cyclone

Commentaire de DuncanIdaho le 18/05/2003 19:33:44

lol ca fait un moment que j'y ai plus touché :S

mais si tu veux envoyer un fichier, y'a KFTP, une OCX de la katarn corporation qui marche bien (http://www.katarncorp.com/)

Commentaire de fpinchon le 18/05/2003 21:31:03

merci a toi, j'y vais !
sinon as-tu fait evoluer ton code depuis ?
amities ;
cyclone

Commentaire de DuncanIdaho le 19/05/2003 21:40:30

non. Mais je tacherais de m'y remetre un jour ;)

Commentaire de fpinchon le 20/05/2003 06:10:26

super l'OCX de la katarn !
merci pour le tuyau.
amities ;
cyclone

Commentaire de TopperFr le 13/10/2003 20:08:07

Moi j'ai un problème. Il marche très bien chez moi mais dès que je fais tester mon prog ailleurs on me reporte à chaque fois ce message d'erreur :

Impossible de cherger le contrôle "Download" à partir de OCX_Download.ocx Votre version de OCX_Download.ocx est peut-être obsolète, Vérifiez que vous utilisez la version du contrôle fournie avec votre application

D'où ça vient et comment le corriger ?

Commentaire de elgringoninio le 15/11/2003 11:20:32

Tout simplement génial !!!

Commentaire de phoennix le 14/01/2004 17:29:59

Salut !

Pour ceux qui ont un problème d'OCX obsolète, vérifiez les composants utilisés pour créer OCX_Download (Ctrl-T dans VB).

On peut donc voir que pour fonctionner, OCX_Download.ocx a besoin de MSINET.OCX et de MSCOMCTL.OCX.

@+

Commentaire de Ziman le 22/12/2004 13:29:03

trop dla balle !

Commentaire de MaxSoldier le 22/01/2005 07:58:10

Exactement ce qu'il me faut merci !

Commentaire de soldier8514 le 03/06/2005 09:52:47

très pratique ce code _ g remarqué toutefois kil manquait le controle de la taille du fichier retournée par la fonction Taille()  :

dans mon cas jai voulu télécharger un fichier pour lequel un mot de passe etait requis / du coup la fonction taille() renvoie 0 / et là  il ya aucun controle ... taille totale vaut alors 0 et l'ocx essaie de telecharger ... et plante ...

j'ai donc rajoutté les qqes lignes

   'Utilise la fonction Taille pour récuperer la taille du
   'fichier
   Taille_Totale = Taille(Source)
   's8514///////////////////////////////////////////////////
   'rajout ici
   If Taille_Totale = 0 Then
   File = FreeFile()
   Open Destination For Binary Access Write As #File
   Put #File, , "mi"
   Close #File
   Timer.Enabled = False
   Exit Sub
   End If
   'fin de rajout //////////////////////////////////////
   Bar.Max = Taille_Totale
   Taille_Recue = 0
   Bar.Value = Taille_Recue


Comm ça si on essaie de telecharger qqchose protégé par mot de passe (donc inaccessible ) ou bien un fichier inexistant  _ l'ocx crée kan meme un fichier de  moins de 1 ko _

A+

Commentaire de takali le 24/06/2005 18:21:03

Bonjour
je vais posé une question que vous allez trouvé tres bête mais :( ou faut t'il mettre l'adresse du url du fichier

A+ et Merci d'avance

Commentaire de Ziman le 25/06/2005 15:04:51

DownLoad1.Download "Source", "destination", AutoResume

C'est ainsi si ej m'en souviens bien
tu remplaces "Source" par l'url, destination apr lemplacement sur ton disque dur et AutoResume tu emt soit True si tu veux qu'il recréer le fichier ou False si tu veux le contraire (ou c'est le contraire, je ne sais plus, test et tu verras)

Commentaire de MiniKiller le 04/07/2005 19:11:52

Bonjour, je chercher à savoir comment je peux modifier la source de façon à ce qu'elle ne plante pas si l'ordinateur n'est pas connecté à Internet et/ou si le serveur est Out.
Merci à vous en tout cas, très bonne source !

Commentaire de soldier8514 le 04/07/2005 20:29:44

regardes ce que jai marqué plus haut petit scarabé _ c justement la soluce à ton soucis because si le fichier ne peut pas etre téléchargé alors Taille_Totale = 0  ;)

Commentaire de MiniKiller le 04/07/2005 22:33:00

Et bien en fait, si je demandais ça c'est parce que j'ai essayé ton code mais cela ne fonctionne pas, j'ai toujours une erreur 380. Pourtant le code est mis au bon endroit... je vais essayer de trouver la cause du problème. Merci

Commentaire de MiniKiller le 04/07/2005 23:03:33

Oups désolé pour ces posts inutiles, cela va bien je modifiais le mauvais fichier :-/ Ma médiocrité  me tuera :D
++

Commentaire de soundpanther le 09/12/2007 17:22:30 10/10

10/10 tres bien

Commentaire de alinedved le 09/04/2011 15:19:09

je veux connaitre la taille de telechargement totale sur une machine?

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 4,399 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales