You would like to upload a file to an FTP server.
Let us set up a local FTP server. In Unix/Linux, you can install the wu-ftpd package using the following command:
$ sudo apt-get install wu-ftpd
On a Windows machine, you can install the FileZilla FTP server, which can be downloaded from https://filezilla-project.org/download.php?type=server.
You should create an FTP user account following the FTP server package's user manual.
You would also like to upload a file to an ftp server. You can specify the server address, login credentials, and filename as the input argument of your script. You should create a local file called readme.txt
with any text in it.
Using the following script, let's set up a local FTP server. In Unix/Linux, you can install the wu-ftpd package. Then, you can upload a file to the logged-in user's home directory. You can specify the server address, login credentials, and filename as the input argument of your script.
Listing 5.2 gives the FTP Upload Example as follows:
#!/usr/bin/env python # Python Network Programming Cookbook -- Chapter - 5 # This program is optimized for Python 2.7. # It may run on any other version with/without modifications. import os import argparse import ftplib import getpass LOCAL_FTP_SERVER = 'localhost' LOCAL_FILE = 'readme.txt' def ftp_upload(ftp_server, username, password, file_name): print "Connecting to FTP server: %s" %ftp_server ftp = ftplib.FTP(ftp_server) print "Login to FTP server: user=%s" %username ftp.login(username, password) ext = os.path.splitext(file_name)[1] if ext in (".txt", ".htm", ".html"): ftp.storlines("STOR " + file_name, open(file_name)) else: ftp.storbinary("STOR " + file_name, open(file_name, "rb"), 1024) print "Uploaded file: %s" %file_name if __name__ == '__main__': parser = argparse.ArgumentParser(description='FTP Server Upload Example') parser.add_argument('--ftp-server', action="store", dest="ftp_server", default=LOCAL_FTP_SERVER) parser.add_argument('--file-name', action="store", dest="file_name", default=LOCAL_FILE) parser.add_argument('--username', action="store", dest="username", default=getpass.getuser()) given_args = parser.parse_args() ftp_server, file_name, username = given_args.ftp_server, given_args.file_name, given_args.username password = getpass.getpass(prompt="Enter you FTP password: ") ftp_upload(ftp_server, username, password, file_name)
If you set up a local FTP server and run the following script, this script will log in to the FTP server and then will upload a file. If a filename argument is not supplied from command line by default, it will upload the readme.txt
file.
$ python 5_2_upload_file_to_ftp_server.py Enter your FTP password: Connecting to FTP server: localhost Login to FTP server: user=faruq Uploaded file: readme.txt $ cat /home/faruq/readme.txt This file describes what to do with the .bz2 files you see elsewhere on this site (ftp.kernel.org).
In this recipe, we assume that a local FTP server is running. Alternatively, you can connect to a remote FTP server. The ftp_upload()
method uses the FTP()
function of Python's ftplib
to create an FTP connection object. With the login()
method, it logs in to the server.
After a successful login, the ftp
object sends the STOR command with either the storlines()
or storbinary()
method. The first method is used for sending ASCII text files such as HTML or text files. The latter method is used for binary data such as zipped archive.
It's a good idea to wrap these FTP methods with try-catch
error-handling blocks, which is not shown here for the sake of brevity.
13.59.107.152