Bonjour à tous,
Je me permets de solliciter votre aide car je suis actuellement bloqué sur un problème de transfert d'un fichier local sur un FTP en SSL.
Je me suis inspiré de la FAQ du forum à l'adresse suivante : https://python.developpez.com/faq/?page=FTP#FTPUpload
J'ai un fichier "toto.txt" dans le répertoire "/tmp" en local.
Je souhaite envoyer ce fichier dans un répertoire "/IN" en FTPES (FTP Explicite SSL).
J'ai commencé par lister le contenu du FTPES :
Je récupère bien les données dans mon terminal
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 def connect(): ftp = FTP_TLS('ftps.monsite.fr') ftp.debugging = 2 ftp.login(username, password) return ftp ftp = connect() ftp.prot_p() ftp.retrlines('LIST')
*cmd* 'AUTH TLS'
*put* 'AUTH TLS\r\n'
*get* '234 AUTH command ok. Expecting TLS Negotiation.\n'
*resp* '234 AUTH command ok. Expecting TLS Negotiation.'
*cmd* 'USER username'
*put* 'USER username\r\n'
*get* '331 Password required\n'
*resp* '331 Password required'
*cmd* 'PASS *********'
*put* 'PASS *********\r\n'
*get* '230 User logged in.\n'
*resp* '230 User logged in.'
*cmd* 'PBSZ 0'
*put* 'PBSZ 0\r\n'
*get* '200 PBSZ command successful.\n'
*resp* '200 PBSZ command successful.'
*cmd* 'PROT P'
*put* 'PROT P\r\n'
*get* '200 PROT command successful.\n'
*resp* '200 PROT command successful.'
*cmd* 'TYPE A'
*put* 'TYPE A\r\n'
*get* '200 Type set to A.\n'
*resp* '200 Type set to A.'
*cmd* 'PASV'
*put* 'PASV\r\n'
*get* '227 Entering Passive Mode (217,13,61,50,196,176).\n'
*resp* '227 Entering Passive Mode (217,13,61,50,196,176).'
*cmd* 'LIST'
*put* 'LIST\r\n'
*get* '125 Data connection already open; Transfer starting.\n'
*resp* '125 Data connection already open; Transfer starting.'
08-22-20 01:55PM <DIR> IN
*get* '226 Transfer complete.\n'
*resp* '226 Transfer complete.'
Maintenant je souhaite envoyer mon fichier '/tmp/toto.txt' qui fait une taille de 95 Ko au serveur FTPES dans le répertoire '/IN/toto.txt'
Voici les informations récupérées dans mon terminal après quelques minutes
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 def connect(): ftp = FTP_TLS('ftps.monsite.fr') ftp.debugging = 2 ftp.login(username, password) return ftp ftp = connect() ftp.prot_p() ftp.storbinary('STOR /IN/toto.txt', open('/tmp/toto.txt', 'rb')) ftp.quit() ftp.close()
*cmd* 'AUTH TLS'
*put* 'AUTH TLS\r\n'
*get* '234 AUTH command ok. Expecting TLS Negotiation.\n'
*resp* '234 AUTH command ok. Expecting TLS Negotiation.'
*cmd* 'USER username'
*put* 'USER username\r\n'
*get* '331 Password required\n'
*resp* '331 Password required'
*cmd* 'PASS *********'
*put* 'PASS *********\r\n'
*get* '230 User logged in.\n'
*resp* '230 User logged in.'
*cmd* 'PBSZ 0'
*put* 'PBSZ 0\r\n'
*get* '200 PBSZ command successful.\n'
*resp* '200 PBSZ command successful.'
*cmd* 'PROT P'
*put* 'PROT P\r\n'
*get* '200 PROT command successful.\n'
*resp* '200 PROT command successful.'
*cmd* 'TYPE I'
*put* 'TYPE I\r\n'
*get* '200 Type set to I.\n'
*resp* '200 Type set to I.'
*cmd* 'PASV'
*put* 'PASV\r\n'
*get* '227 Entering Passive Mode (217,13,61,50,196,52).\n'
*resp* '227 Entering Passive Mode (217,13,61,50,196,52).'
*cmd* 'STOR /IN/toto.txt'
*put* 'STOR /IN/toto.txt\r\n'
*get* '125 Data connection already open; Transfer starting.\n'
*resp* '125 Data connection already open; Transfer starting.'
Traceback (most recent call last):
File "main.py", line 46, in <module>
ftp.storbinary('STOR /IN/toto.txt', open('/tmp/toto.txt', 'rb'))
File "/usr/lib/python3.7/ftplib.py", line 514, in storbinary
conn.unwrap()
File "/usr/lib/python3.7/ssl.py", line 1094, in unwrap
s = self._sslobj.shutdown()
ConnectionResetError: [Errno 104] Connection reset by peer
Je constate que lors de l'exécution du script, je visualise sous Filezilla la présence du fichier dans le répertoire '/IN' avec une taille de 0 octet.
Lorsque j'ai le message d'erreur dans mon terminal, le fichier vide toto.txt a disparu du serveur FTPES
J'ai fais un test en transférant le fichier manuellement avec Filezilla.
Je n'ai eu aucun problème.
Le transfert a bien aboutit.
Est ce que vous pourriez me donner des conseils pour me permettre d'avancer sur la résolution du problème.
Merci par avance.
Partager