Deposer une image sur un ftp

cs_labk92 Messages postés 12 Date d'inscription dimanche 16 mars 2003 Statut Membre Dernière intervention 29 juillet 2010 - 10 mars 2009 à 15:18
cs_labk92 Messages postés 12 Date d'inscription dimanche 16 mars 2003 Statut Membre Dernière intervention 29 juillet 2010 - 12 mars 2009 à 15:27
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

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
10 mars 2009 à 16:06
par quel biais as tu envoyé ton fichier ?

Winsock, control Inet, Apis WinInet ?
0
cs_labk92 Messages postés 12 Date d'inscription dimanche 16 mars 2003 Statut Membre Dernière intervention 29 juillet 2010
10 mars 2009 à 17:35
Bonjour Renfield,

je passe par wininet.

Oublier, c'est trahir...(Génocide Arménien 1915)
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
11 mars 2009 à 08:06
ok... quel est ton code ?

on doit pouvoir arranger cela, je joues souvent avec ces APIs...
0
cs_labk92 Messages postés 12 Date d'inscription dimanche 16 mars 2003 Statut Membre Dernière intervention 29 juillet 2010
11 mars 2009 à 10:14
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
0

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

Posez votre question
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
11 mars 2009 à 10:30
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.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
11 mars 2009 à 10:35
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...
0
cs_labk92 Messages postés 12 Date d'inscription dimanche 16 mars 2003 Statut Membre Dernière intervention 29 juillet 2010
11 mars 2009 à 10:44
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?
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
11 mars 2009 à 10:48
juste qu'il faut fermer tous les handles ouverts...
0
cs_labk92 Messages postés 12 Date d'inscription dimanche 16 mars 2003 Statut Membre Dernière intervention 29 juillet 2010
11 mars 2009 à 10:53
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)
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
11 mars 2009 à 11:06
tout bêtement

InternetCloseHandle hConnection
InternetCloseHandle Hopen

pour ca que je trouve ta structure très étrange...
0
cs_labk92 Messages postés 12 Date d'inscription dimanche 16 mars 2003 Statut Membre Dernière intervention 29 juillet 2010
12 mars 2009 à 15:27
Renfield ou quelqu'un d'autres aurait une réponse ?
0
Rejoignez-nous