Search code examples
pythonpython-3.xftpftplib

Downloading file from FTP server with ftplib: Always 0 bytes/empty


I'm trying to download a file from an FTPS server, using Python ftplib.

But the downloaded file has always 0 bytes (is empty). If I see the file in the server with WinSCP, the file has data (about 1Kb). In WinSCP I'm using the options "Encryption: Explicit TSL" and "PassiveMode=False".

What is wrong with the code? Thanks!!

This is the code I am using:

import ftplib

server='10.XX.XX.XX'
username='username'
password='password'

session = ftplib.FTP_TLS(server)
session.login(user=username,passwd=password)
session.prot_p()
session.set_pasv(False)
session.nlst()
session.cwd("home")
print(session.pwd())
filename = "test.txt"
# Open a local file to store the downloaded file
my_file = open(r'c:\temp\ftpTest.txt', 'wb') 
session.retrbinary('RETR ' + filename, my_file.write, 1024)

session.quit()

Solution

  • You are not closing the local file after the download. You should use context manager for that. Similarly also for the FTP session:

    with ftplib.FTP_TLS(server) as session:
        session.login(user=username, passwd=password)
        session.prot_p()
        session.set_pasv(False)
        session.nlst()
        session.cwd("home")
        print(session.pwd())
        filename = "test.txt"
        # Open a local file to store the downloaded file
        with open(r'c:\temp\ftpTest.txt', 'wb') as my_file: 
            session.retrbinary('RETR ' + filename, my_file.write, 1024)