How to upload a file in a secured FTP (FTPS)?

12968
6
Jump to solution
12-01-2015 01:41 PM
SaidAkif
New Contributor III

Hi all, all. To upload a file in an FTLS I used the FTP_TLS from ftplib, here is my code (I adapted from a code found on the web):

import ftplib from ftplib
import FTP_TLS
import os 
import ssl 
import sys 
server = XXXXXXXXXXXXX
user = XXXXXXXXXXXXXXXX 
passwd = XXXXX
PathFile = 'Q:\GW\EC1140WH_Con_HF\HCM_CARTS' 
def connect_ftp():
     ftp = FTP_TLS(server, user, passwd)
     ftp.set_pasv(True)
     ftp.prot_p()
     ftp.set_debuglevel(2)
     return ftp 
def upload_file(ftp_connection, upload_file_path):
     try: 
         upload_file1 = open(os.path.join(PathFile,upload_file_path), 'r')
         print('Uploading ' + upload_file_path + "...")
         ftp_connection.storbinary('STOR ' + upload_file_path, upload_file1)
         ftp_connection.quit()
         ftp_connection.close()
         upload_file.close()
         print('Upload finished.')
     except Exception, e:
         print("Error uploading file: " + str(e))
ftp_conn = connect_ftp()
if ftp_conn:   
     print("Success connection")
     upload_file(ftp_conn, 'LisezmoiReadme.docx')

Unfortunatly, I got the message:

Success connection

Uploading LisezmoiReadme.docx...

*cmd* 'TYPE I' *put* 'TYPE I\r\n'

*get* '200 Type set to I.\r\n'

*resp* '200 Type set to I.'

*cmd* 'PASV' *put* 'PASV\r\n'

*get* '227 Entering Passive Mode (142,34,138,110,197,108).\r\n'

*resp* '227 Entering Passive Mode (142,34,138,110,197,108).'

*cmd* 'STOR LisezmoiReadme.docx'

*put* 'STOR LisezmoiReadme.docx\r\n'

*get* '125 Data connection already open; Transfer starting.\r\n'

*resp* '125 Data connection already open; Transfer starting.'

*get* '425 Data channel timed out due to not meeting the minimum bandwidth requirement.\r\n'

*resp* '425 Data channel timed out due to not meeting the minimum bandwidth requirement.'

Error uploading file: 425 Data channel timed out due to not meeting the minimum bandwidth requirement.

The last line is the error and i dont know how to resolve it? Any help please? Is it better to use the transfercmd command?

I use ArcGIS 10.1

Thanks a lot

0 Kudos
1 Solution

Accepted Solutions
SaidAkif
New Contributor III

Hi all I resolve the problem

Here is the code

import ftplib 
from ftplib import FTP_TLS 
import os 
import sys 
 
server = XXXXXXXX
user = XXXXXXXXXXX
passwd = XXXXXXXXXXXXXX
PathFile = 'XXXXXXXXXXXXXXXXXXXXXX

def connect_ftp():
     ftp = ftplib.FTP_TLS(timeout=10)
     ftp.connect(server, 21)
     ftp.auth()
     ftp.prot_p()
     ftp.login(user, passwd)
      ftp.set_debuglevel(2)
     return ftp
def upload_file(ftp_connection, upload_file_path):     
     try:
         upload_file1 = open(os.path.join(PathFile,upload_file_path), 'r')
         print('Uploading ' + upload_file_path + "...")
         ftp_connection.storbinary('STOR ' + upload_file_path, upload_file1, 1000)
         ftp_connection.quit()
         ftp_connection.close()
         upload_file1.close()
         print('Upload finished.')

      except Exception, e:
         print("Error uploading file: " + str(e))

ftp_conn = connect_ftp()
if ftp_conn:
   print("Success connection")
   upload_file(ftp_conn, 'LisezmoiReadme.docx')


Thanks

View solution in original post

0 Kudos
6 Replies
DanPatterson_Retired
MVP Emeritus

could you format the code block using syntax highlighting please

0 Kudos
Luke_Pinner
MVP Regular Contributor

This doesn't appear to have anything to do with ArcGIS. You might be better asking this question at StackOverflow

0 Kudos
SaidAkif
New Contributor III

I really believe so. It is part of our skills to now how to retreive or save data in an ftp site

DanPatterson_Retired
MVP Emeritus

The point Luke is making is that is a computing skill and not a GIS skill per se, perhaps it is presumed erroneously that one has the former before one applies them to the latter.

0 Kudos
SaidAkif
New Contributor III

Hi all I resolve the problem

Here is the code

import ftplib 
from ftplib import FTP_TLS 
import os 
import sys 
 
server = XXXXXXXX
user = XXXXXXXXXXX
passwd = XXXXXXXXXXXXXX
PathFile = 'XXXXXXXXXXXXXXXXXXXXXX

def connect_ftp():
     ftp = ftplib.FTP_TLS(timeout=10)
     ftp.connect(server, 21)
     ftp.auth()
     ftp.prot_p()
     ftp.login(user, passwd)
      ftp.set_debuglevel(2)
     return ftp
def upload_file(ftp_connection, upload_file_path):     
     try:
         upload_file1 = open(os.path.join(PathFile,upload_file_path), 'r')
         print('Uploading ' + upload_file_path + "...")
         ftp_connection.storbinary('STOR ' + upload_file_path, upload_file1, 1000)
         ftp_connection.quit()
         ftp_connection.close()
         upload_file1.close()
         print('Upload finished.')

      except Exception, e:
         print("Error uploading file: " + str(e))

ftp_conn = connect_ftp()
if ftp_conn:
   print("Success connection")
   upload_file(ftp_conn, 'LisezmoiReadme.docx')


Thanks

0 Kudos
James_001
Occasional Contributor II

Hi Said,

Although it is while ago, how about if some one want to download .csv file from FTPS with  "Require explicit FTP over TLS".

I can download manually my.csv file in filezilla with the same protocol but unfortunately whenever I tried this in python timeout error coming up  while accessing  any LIST or DIR command from python ftplib. I am not sure what is going on? Any idea?    

0 Kudos