Deposer une image sur un ftp

Signaler
Messages postés
12
Date d'inscription
dimanche 16 mars 2003
Statut
Membre
Dernière intervention
29 juillet 2010
-
Messages postés
12
Date d'inscription
dimanche 16 mars 2003
Statut
Membre
Dernière intervention
29 juillet 2010
-
Bonjour,

Je viens de créer une application sur vb6 consistant à déposer une image gif ou jpg sur un FTP. Le système fonctionne très bien. J'arrive à retrouver l'image uploadé sur le ftp.

Cependant, lorsque j'ouvre ce fichier uploadé, l'image est soit dégradée (lorsque c'est un fichier type jpg), soit carrément coupé (lorsqu'il s'agit d'un fichier gif). Alors que l'image de départ est plus que correct.

Je ne comprend pas pourquoi.

Pouvez vous m'aider?

Je vous en remercie par avance.

Oublier, c'est trahir...(Génocide des Arménien 1915)

11 réponses

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
68
par quel biais as tu envoyé ton fichier ?

Winsock, control Inet, Apis WinInet ?
Messages postés
12
Date d'inscription
dimanche 16 mars 2003
Statut
Membre
Dernière intervention
29 juillet 2010

Bonjour Renfield,

je passe par wininet.

Oublier, c'est trahir...(Génocide Arménien 1915)
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
68
ok... quel est ton code ?

on doit pouvoir arranger cela, je joues souvent avec ces APIs...
Messages postés
12
Date d'inscription
dimanche 16 mars 2003
Statut
Membre
Dernière intervention
29 juillet 2010

Bonjour Renfield,

Encore merci de te préoccupé de mon problème. Pour te simplifié la compréhension, je t'ai séparé les codes en trois parties :

1) Le code lorsque l'utilisateur clique sur un bouton permettant d'envoyer l'image sur le FTP
2) Le code de la fonction FTP_Create_Hopen
3) Un extrait du code de wininet.dll (le code étant très long, je n'ai mit que les fonctions et/ou déclarations concernés)

1)-------------------------------------------------

"distant_host, distant_login, distant_pass et distant_dossier sont les informations de connexions au ftp. Les valeurs sont stockées dans une base de donnés permettant à l'utilisateur de les changés"

dwType = FTP_TRANSFER_TYPE_ASCII
   
'Appel de la connexion
Call FTP_Create_Hopen(distant_host, distant_login, distant_pass.Text)
           
    DoEvents
    szFileLocal = NomFichier
    szDirRemote = NomFichier

    stRepFtp = distant_dossier

    If hConnection Then
   
             'Positionne le répertoire distant
            If FtpSetCurrentDirectory(hConnection, stRepFtp) Then
           
                ' Envoie le fichier
                connexion = FtpPutFile(hConnection, szFileLocal, szDirRemote, dwType, 0)
           
            End If

    End If


2)-------------------------------------------------

Public Sub FTP_Create_Hopen(Server As String, UserName As String, Password As String)

Hopen = InternetOpen(scUserAgent, INTERNET_OPEN_TYPE_DIRECT, vbNullString, vbNullString, 0)
hConnection = InternetConnect(Hopen, Server, INTERNET_INVALID_PORT_NUMBER, UserName, Password, INTERNET_SERVICE_FTP, 0, 0)

End Sub


3)-------------------------------------------------

Public Const FTP_TRANSFER_TYPE_ASCII = &H1

Public Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" _
(ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, _
ByVal sProxyBypass As String, ByVal lFlags As Long) As Long

Public Declare Function InternetConnect Lib "wininet.dll" Alias "InternetConnectA" _
(ByVal hInternetSession As Long, ByVal sServerName As String, ByVal nServerPort As Integer, _
ByVal sUsername As String, ByVal sPassword As String, ByVal lService As Long, _
ByVal lFlags As Long, ByVal lContext As Long) As Long


Public Declare Function FtpPutFile Lib "wininet.dll" Alias "FtpPutFileA" _

(ByVal hFtpSession As Long, ByVal lpszLocalFile As String, _

      ByVal lpszRemoteFile As String, _

      ByVal dwFlags As Long, ByVal dwContext As Long) As Boolean

Public Declare Function FtpSetCurrentDirectory Lib "wininet.dll" Alias "FtpSetCurrentDirectoryA" _
    (ByVal hFtpSession As Long, ByVal lpszDirectory As String) As Boolean
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
68
Arrete de valider les réponses a tout va...

en voyant ton message, les gens se diront que tu as trouvé ta réponse et ne liront pas ton message... tu réduit toi même les chances d'avoir une réponse en faisant cela.
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
68
ton code est très étrangement structuré.... (variables publiques, etc...

penses tu bien a faire les InternetCloseHandle ?

peux tu me filer un zip par mail, j'y verrai plus clair...
Messages postés
12
Date d'inscription
dimanche 16 mars 2003
Statut
Membre
Dernière intervention
29 juillet 2010

Ah je pense qu'il fallait à chaque fois valider la réponse.

Tu trouveras ci dessous, (toujours dans wininet.dll) InternetCloseHandle :

' Closes a single Internet handle or a subtree of Internet handles.
Public Declare Function InternetCloseHandle Lib "wininet.dll" _
(ByVal hInet As Long) As Integer

Par contre quand tu dis "penses tu bien a faire les InternetCloseHandle" qu'est ce que tu entends par la?
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
68
juste qu'il faut fermer tous les handles ouverts...
Messages postés
12
Date d'inscription
dimanche 16 mars 2003
Statut
Membre
Dernière intervention
29 juillet 2010

Non je ne pense pas l'avoir fait. Tu penses qu'il faudrait que je le mette juste à la fin du code en 1) (le code du bouton) ? Si oui qu'elle serait la syntaxe car je n'ai jamais fait cela.

Oublier, c'est trahir...(Génocide Arménien 1915)
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
68
tout bêtement

InternetCloseHandle hConnection
InternetCloseHandle Hopen

pour ca que je trouve ta structure très étrange...
Messages postés
12
Date d'inscription
dimanche 16 mars 2003
Statut
Membre
Dernière intervention
29 juillet 2010

Renfield ou quelqu'un d'autres aurait une réponse ?