Uploader un fichier [Résolu]

Messages postés
457
Date d'inscription
mercredi 4 août 2010
Dernière intervention
24 janvier 2019
-
Bonjour,
Pour downloader un fichier de mon serveur vers mon PC j'utilise
Declare Function URLDownloadToFile Lib "urlmon" _
Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL _
As String, ByVal szFileName As String, ByVal dwReserved As Long, _
 ByVal lpfnCB As Long) As Long
URLDownloadToFile(0, URL, LocalFilename, 0, 0).
Comment fait-on le contraire aussi simplement ?
Afficher la suite 

Votre réponse

8 réponses

Messages postés
14383
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
10 février 2019
153
0
Merci
Soit tu fais une page qui permet l'upload puis tu cherches à passer les bons paramètres au serveur (requête POST avec le fichier)
Soit tu passes par FTP.
Herve_be
Messages postés
457
Date d'inscription
mercredi 4 août 2010
Dernière intervention
24 janvier 2019
-
Merci pour ta réponse.
En pratique je fais comment ?
NHenry
Messages postés
14383
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
10 février 2019
153 -
Google :
vb6 upload ftp
vb6 upload HTTP post
Herve_be
Messages postés
457
Date d'inscription
mercredi 4 août 2010
Dernière intervention
24 janvier 2019
-
Bonsoir,
J'avais bien cherché sur Google avant de poser la question ici.
J'ai trouvé par exemple
Option Explicit

Private Declare Sub Sleep Lib "kernel32.dll" _
    (ByVal dwMilliseconds As Long)

Private Function UploadFile(ByVal sURL As String _
    , ByVal sUserName As String _
    , ByVal sPassword As String _
    , ByVal sLocalFileName As String _
    , ByVal sRemoteFileName As String) As Boolean

    UploadFile = False

    With Inet1
        .UserName = sUserName
        .Password = sPassword
        .Execute sURL, "PUT " & sLocalFileName & " " & sRemoteFileName

        Do While .StillExecuting
            Sleep 100
            DoEvents
        Loop

        UploadFile = (.ResponseCode = 0)
        Debug.Print .ResponseCode
    End With
End Function

Private Sub cmdUpload_Click()
    UploadFile "ftp://localhost", "", "", "C:\Test.txt", "/Level1/Uploaded.txt"
End Sub
Est-ce que je ne risque pas d'avoir des problèmes parce que mon utilisateur ne dispose pas de MSINET.OCX ?
J'ai déjà eu des problèmes avec d'autres fichiers .ocx donc j'essaye d'éviter.
Commenter la réponse de NHenry
Messages postés
457
Date d'inscription
mercredi 4 août 2010
Dernière intervention
24 janvier 2019
0
Merci
Bonjour,
En utilisant le code ci-dessous, l'upload fonctionne très bien (je retrouve bien le fichier sur le serveur)
With Inet
.URL = "ftp://ftp.xxxxx.be"
.UserName = "xxxx.be"
.Password = "******"
.Execute , "PUT " & GraphImage & url
End With

Le problème est que je ne parviens pas à savoir dans VB quand l'upload est terminé.
J'ai ajouté avant End With
   While .StillExecuting
DoEvents
Wend
.Execute , "CLOSE"
mais ça boucle !
Une idée ?
NHenry
Messages postés
14383
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
10 février 2019
153 -
Bonjour,

N'ayant plus VB6 sur ma machine actuelle, je ne saurais tester le code.
Je trouve étrange que ce code pose problème.

Mais, cela me conforte plus dans mon avis qui est d'abandonner VB6 (plus maintenu depuis 12 ans) et de passer à .NET.
Herve_be
Messages postés
457
Date d'inscription
mercredi 4 août 2010
Dernière intervention
24 janvier 2019
-
Abandonner VB6 au profit de VB.net est plus facile à dire qu'à convertir des dizaines de millier de lignes !
En fait sans les 4 dernières lignes ça fonctionne très bien sauf que je ne sais pas quand le chargement est terminé.
Commenter la réponse de Herve_be
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
264
0
Merci
Bonjour,
Mets une instruction de ton choix (msgbox ou autre) après ton wend.
Herve_be
Messages postés
457
Date d'inscription
mercredi 4 août 2010
Dernière intervention
24 janvier 2019
-
Je ne comprends pas ce que tu veux dire ou faire.
Il y a une instruction après Wend : .Execute , "CLOSE" !
Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
264
0
Merci
C'est alors moi qui ne te comprends plus.
Tu dis vouloir ceci :
sauf que je ne sais pas quand le chargement est terminé.
Ton chargement est terminé lorsque tu sors de la boucle de DoEvents
Et donc : me relire.

J'observe par ailleurs (mais il s'agit là d'un autre aspect) que tu ne prends aucune protection. Quid si faille ?
Je te conseille à cet égard de lire ceci :
http://msdn.microsoft.com/en-us/library/office/ff844743%28v=office.15%29.aspx

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
Herve_be
Messages postés
457
Date d'inscription
mercredi 4 août 2010
Dernière intervention
24 janvier 2019
-
Merci deme relire aussi
J'ai ajouté avant End With

While .StillExecuting
DoEvents
Wend
.Execute , "CLOSE"

mais ça boucle !


En d'autres termes, si j'ajoute quoi que ce soit après le Wend il ne se passe rien puisque ça boucle car StillExecuting est toujours false alors que le fichier est bien uploadé !
donc j'ai supprimé la boucle While - Wend ainsi que l'execute "close" et ça fonctionne très bien.

Je ne trouve pas de quoi parer à une faille dans l'article dont tu donnes le lien.
Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
264
0
Merci
1) le lien que je t'ai invité à lire plus haut traite les impondérables éventuels et permet de quitter sans tout "breaker".
2) voici un autre lien (dans les sources ici-même déposées) :
http://codes-sources.commentcamarche.net/source/6920-upload-ftp-inet-avec-progressbar
celui-ci va plus loin encore. Il est même assorti d'une barre constatant la progression.
Herve_be
Messages postés
457
Date d'inscription
mercredi 4 août 2010
Dernière intervention
24 janvier 2019
-
1) Le lien explique que si StillExecuting on demande à l'utilisateur s'il veut continuer à attendre.
Ma question est que StillExecuting reste à true ( je ne sais toujours pas pourquoi parce qu'en fait le fichier est bien chargé) donc si j'attends qu'il devienne false je boucle;
2) je n'ai que faire d'une barre de progression pour charger un fichier de 200k : c'est fini avant que la barre commence à s'afficher !

Merci de rester dans le sujet.
Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
264
0
Merci
1)
Merci de rester dans le sujet.
Je crains d'avoir dans ce cas à te quitter.
Si tu n'es pas capable de "voir "dans ce code qu'il est capable (barre de progression ou non) qu'il a chargé un pourcentage (et donc 100 % également), avec ou sans barre de progression, j'abdique, monsieur.
2) quant au premier lien : hé non ... il ne se contente pas d'attendre sans raison ...
Bonne chance (moi, je vais me reposer. J'en ai besoin, crois-moi).

Herve_be
Messages postés
457
Date d'inscription
mercredi 4 août 2010
Dernière intervention
24 janvier 2019
-
Je crains d'avoir dans ce cas à te quitter. Ouf !
Quand je pose une question sur ce forum j'espère chaque fois que tu ne vas pas répondre car je suis alors certain que je n'aurai pas la réponse à ma question qui est, je le répète pour les autres qui auraient une réponse pertinente

Pourquoi le programme ne sort-il pas dela boucle
While .StillExecuting
DoEvents
Wend
alors que le fichier est bien uploadé ?
Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
264
0
Merci
Je n'en sais rien, ami, dès lors que je n'ai pas le reste de ton code.
On ignore même (tu n'en as rien dit) dans quel évènement tu lances ce code.
Cela peut par exemple arriver lorsque le code que tu as montré s'exécute alors que le contrôle inet n'est pas encore totalement chargé.
Il se peut par ailleurs que tu sois encore en possession d'une version non corrigée et que comparer avec True conduise alors à une erreur : retour de 1 au lieu de -1 (qui est la valeur de True en VB6).
Si tel était le cas (version non corrigée de VB6), il conviendrait de faire ta boucle While avec "tant que la propriété stillexecuting n'est pas fausse" et non avec "tant que la propriété stillexecuting est vraie"
Une petite remarque : il M'a fallu faire des recherches (que TU aurais pu faire) pour apprendre qu'une version antérieure de INET comportait cette petite erreur.
Tes remarques font que ce sera là ma dernière intervention dans cette discussion (réponse à ton propre voeu).
Voilà voilà ...

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
Commenter la réponse de ucfoutu
Messages postés
457
Date d'inscription
mercredi 4 août 2010
Dernière intervention
24 janvier 2019
0
Merci
Code complet
Private Sub URL_Click()
On Error GoTo InetError
InetState.Visible = True
With Inet
.URL = "ftp://ftp.yyyyyy.be"
.UserName = "xxxxxx.be"
.Password = "********"
.Execute , "PUT " & App.Path & "" & ...
'While .StillExecuting
' DoEvents
'Wend
'.Execute , "CLOSE"
End With

MsgBox ("L'image a étét transférée sur ..."), vbInformation
InetState.Visible = False
On Error GoTo 0
Exit Sub

InetError:
MsgBox ("Impossible de transférer l'image : " & Err.Number & " (" & Err.Description & ")" Inet.ResponseCode & ":" & Inet.ResponseInfo), vbExclamation
InetState.Visible = False
On Error GoTo 0
Exit Sub
End Sub

Private Sub Inet_StateChanged(ByVal State As Integer)
Select Case State
Case icNone: InetState.Text = InetState.Text & vbCrLf & "Connect Failed.... Error"
Case icResponseReceived: InetState.Text = InetState.Text & vbCrLf & "Response Received"
Case ichostresolvinghost: InetState.Text = InetState.Text & vbCrLf & "Looking for IP Address"
Case icHostResolved: InetState.Text = InetState.Text & vbCrLf & "Found IP Address"
Case icConnecting: InetState.Text = InetState.Text & vbCrLf & "Connecting"
Case icConnected: InetState.Text = InetState.Text & vbCrLf & "Connected"
Case icRequesting: InetState.Text = InetState.Text & vbCrLf & "Sending a Request"
Case icRequestSent: InetState.Text = InetState.Text & vbCrLf & "Request Send"
Case icReceivingResponse: InetState.Text = InetState.Text & vbCrLf & "Receiving Response"
Case icResponseReceived: InetState.Text = InetState.Text & vbCrLf & "Response Received"
Case icDisconnecting: InetState.Text = InetState.Text & vbCrLf & "Disconnecting"
Case icDisconnected: InetState.Text = InetState.Text & vbCrLf & "Disconnected"
Case icResponseCompleted: InetState.Text = InetState.Text & vbCrLf & "Response Completed"
Case icError
MsgBox ("Impossible de transférer l'image : " & Inet.ResponseCode & ":" & Inet.ResponseInfo), vbExclamation
End Select
End Sub
Tel quel, tout fonctionne bien; InetState.Text est une textbox dans laquelle je vois bien les étapes de la progression et je reçois le message "l'image a été transférée"

Si je retire les commentaires sur
'While .StillExecuting
' DoEvents
'Wend
'.Execute , "CLOSE"
je vois aussi la progression dans la textbox dont voici le contenu

Found IP Address
Connecting
Connected
Receiving Response
Response Received
Sending a Request
Request Send
Receiving Response
Response Received
Sending a Request
Request Send
Receiving Response
Response Received
Sending a Request
Request Send
Receiving Response
Response Received
Sending a Request
Request Send
Receiving Response
Response Received
Sending a Request
Request Send
Receiving Response
Response Received
Sending a Request
Request Send
Receiving Response
Response Received

mais ensuite ça boucle (aucun message); après "un certain temps" : Visual Basic a cessé de fonctionner ...
Herve_be
Messages postés
457
Date d'inscription
mercredi 4 août 2010
Dernière intervention
24 janvier 2019
-
J'ai essayé de remplacer While .StillExecuting
par While .StillExecuting <> false
et même While .StillExecuting = true
et aussi Do until .StillExecuting = False ... Loop
idem.
Herve_be
Messages postés
457
Date d'inscription
mercredi 4 août 2010
Dernière intervention
24 janvier 2019
-
J'ai trouvé sur un autre forum qu'il suffit de mettre une pause dans la boucle, et ça fonctionne !
While Inet.StillExecuting
DoEvents
Sleep 1000 '1sec
DoEvents
Wend
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Commenter la réponse de Herve_be

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.