本文提供利用python将文件上传到FTP中和从FTP中下载文件到本地的方法
适用环境: python3
from ftplib import FTP
import os.path
#设置FTP连接信息
address= '127.0.0.1'
port= 21
#FTP用户名
user_name= 'user'
#FTP密码
password= 'passwd'
#本地要上传的文件名
local_file_name="local/test.xlsx"
#FTP中要下载的文件名
remote_file_name="remote/test.xlsx"
#将文件上传到FTP
def upload_file(local_file_name):
try:
ftp = FTP()
ftp.connect(address,port)
ftp.login(user_name,password)
#文件上传到FTP服务器的路径(前提是路径要存在,否则会报错)
remote_path="/"#如:将本地文件上传到FTP根目录
ftp.cwd(remote_path)#切换到此路径
file=open(local_file_name,'rb')
#如果参数 pasv 为真,打开被动模式传输 (PASV MODE) ,否则,如果参数 pasv 为假则关闭被动传输模式。
ftp.set_pasv(0)
ftp.storbinary('STOR %s' % os.path.basename(local_file_name),file)
file.close()
ftp.close()
print("文件上传完成")
except Exception as e:
print("文件上传失败...")
print(str(e))
#upload_file(local_file_name)
#从FTP中下载文件到本地
def download_file(remote_file_name):
try:
#创建ftp对象实例
ftp = FTP()
#连接接FTP
ftp.connect(address, port)
#通过账号和密码登录FTP服务器
ftp.login(user_name,password)
#如果参数 pasv 为真,打开被动模式传输 (PASV MODE) ,否则,如果参数 pasv 为假则关闭被动传输模式。
ftp.set_pasv(0)
#设置FTP上文件下载到本地的位置
local_path="local/"#如:将文件下载到当前程序所在目录中的local子目录中,也可以使用绝对路径
#为准备下载到本地的文件,创建文件对象(默认为远程下载的文件名,也可自定义)
local_file_name=local_path + os.path.basename(remote_file_name)
file = open(local_file_name, 'wb')
#从FTP服务器下载文件到前一步创建的文件对象,其中写对象为file.write,1024是缓冲区大小
ftp.retrbinary('RETR '+remote_file_name,file.write,1024)
#关闭下载到本地的文件
#提醒:虽然Python可以自动关闭文件,但实践证明,如果想下载完后立即读该文件,最好关闭后重新打开一次
file.close()
#关闭FTP客户端连接
ftp.close()
print("文件下载完成")
except Exception as e:
print("文件下载失败...")
print(str(e))
#download_file(remote_file_name)