OVH Cloud OVH Cloud

télécharger un fichier

5 réponses
Avatar
scraper
bonjour à tous !

suite de mes démêlées de téléchargement de fichier ...

j'essaie désespérément de télécharger un fichier depuis un site internet,
avec une boite indiquant la progression du téléchargement, et que
l'exécution du code soit stoppée durant le téléchargement ...

j'ai essayé

DoFileDownload StrConv("MonUrl", vbUnicode)

qui fournit en effet une superbe boite de progression ... mais est
asynchrone ... donc, mon code se poursuit, et je ne sais pas si le
téléchargement a réussi ou pas ....

essai aussi de

URLDownloadToFile(Source, Cible) qui s'exécute de manière synchrone, mais
sans montrer de progression du téléchargement ...

y aurait il une 3° voie qui combinerait ces deux là ?

:-)

merci par avance....


--

Attention ! Adresse mail invalide ...
Pour me contacter, cliquez sur le lien ci-dessous:
http://scraper.chez.tiscali.fr/contact.htm

scraper

5 réponses

Avatar
François Picalausa
Hello,

Tu peux utiliser la dernière méthode de ce post:
http://groups.google.com/groups?selm=OX8J9mmaEHA.524%40TK2MSFTNGP09.phx.gbl

Le téléchargement est effectué de manière asynchrone. Il te suffit de
récupérer l'événement Complete pour déterminer quand il faut continuer
l'exécution.

C'est aussi faisable via URLDownloadToFile en utilisant son dernier membre.
Il faut alors avoir une typelib qui décrit l'interface IBindStatusCallback.
Le problème est que s'il y a un plantage du serveur, il y aura plantage de
l'API, et comme on travaille de manière synchrone tout le programme serait
planté!

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net

"scraper" a écrit dans le message de
news:
suite de mes démêlées de téléchargement de fichier ...

j'essaie désespérément de télécharger un fichier depuis un site
internet, avec une boite indiquant la progression du téléchargement,
et que l'exécution du code soit stoppée durant le téléchargement ...

j'ai essayé

DoFileDownload StrConv("MonUrl", vbUnicode)

qui fournit en effet une superbe boite de progression ... mais est
asynchrone ... donc, mon code se poursuit, et je ne sais pas si le
téléchargement a réussi ou pas ....

essai aussi de

URLDownloadToFile(Source, Cible) qui s'exécute de manière synchrone,
mais sans montrer de progression du téléchargement ...

y aurait il une 3° voie qui combinerait ces deux là ?


Avatar
scraper
> Hello,



hello :-)

Tu peux utiliser la dernière méthode de ce post:



http://groups.google.com/groups?selm=OX8J9mmaEHA.524%40TK2MSFTNGP09.phx.gbl

Le téléchargement est effectué de manière asynchrone. Il te suffit de
récupérer l'événement Complete pour déterminer quand il faut continuer
l'exécution.



ben j'y ai été, tu penses bien ! :-)

mais j'ai dû louper un truc, ça fonctionne pas ?

j'ai créé un contrôle utilisateur, j'y ai collé la première partie du code,
je l'ai ajouté à la form, où je l'ai appelé comme tu l'indiques :

----------------
Private Sub Form_Load()
UserControl11.Download "http://...", "c:fichier.txt"
End Sub

Private Sub UserControl11_StateChange(lngSate As Long, strState As String)
If lngSate = 0 Then
MsgBox "Erreur !"
End If
End Sub
-----------------
mais il ne se passe rien ?

dois je rajouter qque chose à la feuille ?


C'est aussi faisable via URLDownloadToFile en utilisant son dernier
membre. Il faut alors avoir une typelib qui décrit l'interface
IBindStatusCallback. Le problème est que s'il y a un plantage du
serveur, il y aura plantage de l'API, et comme on travaille de
manière synchrone tout le programme serait planté!



ah, OK, je savais pas .... de toutes façons, j'ai effectivement parcouru les
articles de MSDN à ce sujet ... et .. humm ... pas compris grand chose !




--

Attention ! Adresse mail invalide ...
Pour me contacter, cliquez sur le lien ci-dessous:
http://scraper.chez.tiscali.fr/contact.htm

scraper
Avatar
François Picalausa
Hello,

Teste peut-être l'événement Complete:
Private Sub UserControl11_Complete(bSuccess As Boolean)
If bSuccess Then
Msgbox "Téléchargement terminé avec succès"
Else
Msgbox "Erreur lors du téléchargement"
End Inf
End Sub

Ce genre d'erreur pourrait se produire si une erreur se produit dans
Download.
Si tu décommente dans Sub Download la ligne MsgBox "Une erreur ...",
l'erreur exacte sera affichée.

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net

"scraper" a écrit dans le message de
news:ujRU5j%

mais j'ai dû louper un truc, ça fonctionne pas ?

j'ai créé un contrôle utilisateur, j'y ai collé la première partie du
code, je l'ai ajouté à la form, où je l'ai appelé comme tu
l'indiques :

----------------
...
-----------------
mais il ne se passe rien ?


Avatar
scraper
Salut à François Picalausa qui dans son post
news:%23lSxfV$
nous a écrit/répondu :

Hello,

Teste peut-être l'événement Complete:
Private Sub UserControl11_Complete(bSuccess As Boolean)
If bSuccess Then
Msgbox "Téléchargement terminé avec succès"
Else
Msgbox "Erreur lors du téléchargement"
End Inf
End Sub

Ce genre d'erreur pourrait se produire si une erreur se produit dans
Download.
Si tu décommente dans Sub Download la ligne MsgBox "Une erreur ...",
l'erreur exacte sera affichée.



merci ! :-)

je commence à y voir un peu plus clair ... non sans mal !

bon, étape suivante :
je suis en train de créer ma boite de dialogue de téléchargement, mais
subitement je me demande si je suis pas en train de réinventer la roue ?
lol

que pourrais je utiliser comme contrôle (et comment ?) pour arriver à un
résultat similaire à celui obtenu avec DoFileDownload, par exemple ?

(j'ai déjà réussi à mettre en place une progressbar ...mais le reste ...)

au fait, dans la fonction que tu m'as indiquée donc ... si j'annule le
téléchargement, l'erreur est pas signalée ??

en tout cas, déjà un grand merci !




--

Attention ! Adresse mail invalide ...
Pour me contacter, cliquez sur le lien ci-dessous:
http://scraper.chez.tiscali.fr/contact.htm

scraper
Avatar
François Picalausa
Hello,

"scraper" a écrit dans le message de
news:
je suis en train de créer ma boite de dialogue de téléchargement, mais
subitement je me demande si je suis pas en train de réinventer la
roue ?



Lors de mes recherches, je n'avais rien trouvé qui permettait
-de faire un téléchargement asynchrone
-avec retour de la progression
-en affichant une boite de dialogue
Ce qui ne veut pas dire que ça n'existe pas ;-)

que pourrais je utiliser comme contrôle (et comment ?) pour arriver à
un résultat similaire à celui obtenu avec DoFileDownload, par exemple
?

(j'ai déjà réussi à mettre en place une progressbar ...mais le reste
...)



Pour afficher correctement les différents états de connection, il faut te
référer à l'aide de VB:
http://msdn.microsoft.com/library/en-us/vb98/html/vbobjAsyncPropertyObject.asp
Le contrôle activeX n'est qu'un "wrapper"...
Les états de connections peuvent être interprétés comme décrit ici:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vb98/html/vbprostatuscodeproperty.asp

Sinon, effectivement,Cancel ne provoque pas un changement d'état en erreur.
Mais il apelle bien Complete avec false pour success..
Il est bien entendu possible d'améliorer le contrôle.. le code que je
présentais dans l'article visait surtout à montrer une manière de procéder
pour télécharger un fichier de manière asynchrone et pas faire le composant
tout fait le plus génial de tous les temps, de toute la galaxie et au delà.

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net