Uploader un fichier

Résolu
Herve_be Messages postés 1015 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 10 mars 2024 - Modifié par Herve_be le 26/08/2014 à 12:18
Herve_be Messages postés 1015 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 10 mars 2024 - 30 nov. 2014 à 11:59
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 ?

8 réponses

NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
26 août 2014 à 12:30
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.
0
Herve_be Messages postés 1015 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 10 mars 2024 2
26 août 2014 à 13:59
Merci pour ta réponse.
En pratique je fais comment ?
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
26 août 2014 à 20:24
Google :
vb6 upload ftp
vb6 upload HTTP post
0
Herve_be Messages postés 1015 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 10 mars 2024 2
26 août 2014 à 20:46
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.
0
Herve_be Messages postés 1015 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 10 mars 2024 2
28 août 2014 à 13:45
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 ?
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
6 sept. 2014 à 16:30
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.
0
Herve_be Messages postés 1015 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 10 mars 2024 2
6 sept. 2014 à 16:49
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é.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
6 sept. 2014 à 17:40
Bonjour,
Mets une instruction de ton choix (msgbox ou autre) après ton wend.
0
Herve_be Messages postés 1015 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 10 mars 2024 2
6 sept. 2014 à 17:54
Je ne comprends pas ce que tu veux dire ou faire.
Il y a une instruction après Wend : .Execute , "CLOSE" !
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 6/09/2014 à 18:40
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
0
Herve_be Messages postés 1015 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 10 mars 2024 2
6 sept. 2014 à 18:51
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
6 sept. 2014 à 19:24
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.
0
Herve_be Messages postés 1015 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 10 mars 2024 2
Modifié par Herve_be le 6/09/2014 à 21:18
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.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
6 sept. 2014 à 22:21
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).

0
Herve_be Messages postés 1015 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 10 mars 2024 2
7 sept. 2014 à 09:07
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é ?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 7/09/2014 à 11:20
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
0
Herve_be Messages postés 1015 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 10 mars 2024 2
Modifié par Herve_be le 7/09/2014 à 11:45
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 ...
0
Herve_be Messages postés 1015 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 10 mars 2024 2
Modifié par Herve_be le 7/09/2014 à 15:22
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.
0
Herve_be Messages postés 1015 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 10 mars 2024 2
30 nov. 2014 à 11:59
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)
0
Rejoignez-nous