ftplib实现FTP上传与下载的功能

FTP server默认的端口号为21。

本文参考地址:https://docs.python.org/3.6/library/ftplib.html

1. ftplib里包含FTP和FTP_TLS两个class,后者是封装了TLS安全传输协议的FTP,本文不多描述,查看官网即可,很简单。

2. ftplib.FTP class就是一个模拟FTP协议客户端的class,可以使用此class与FTP server进行各种交互,如数据上传和下载等。

3. FTP的数据传输有两种模式ASCII和binary格式,一般来说使用binary格式更加的普遍,适用场景较多。也因此FTP class最常用的四个method其实是:

  • FTP.storbinary(cmd, fp, blocksize=8192, callback=None, rest=None)
  • FTP.storlines(cmd, fp, callback=None)
  • FTP.retrbinary(cmd, callback, blocksize=8192, rest=None)
  • FTP.retrlines(cmd, callback=None)

其中storbinary与retrbinary就是进行二进制数据传输的method。

FTP数据下载:

一般来说,生产上会将ftp用户的访问权限限定在自己的家目录下(可通过修改/etc/vsftpd.conf来改变此行为模式)。

# The FTP class supports the with statement, e.g.:
from ftplib import FTP
with FTP('<ftp server IP>','user','passwd') as c,\
	open('<local filename/fullpath_filename>','wb') as f:
	c.retrbinary('RETR <remote ftpserver filename>',f.write)
# 直接使用host,user,passwd参数初始化FTP,相当于执行了FTP.connect().login(),简便起见一般不这么麻烦的写
# f.closed为True可知文件已自动关闭

FTP class支持python context的with语法,此语法在python中是普遍推荐的,可以帮你自动处理相关对象的上下文,也就是说可以帮你自动关闭相关的对象,防止自己忘了quit or close。

retr开头的两个method主要参数是cmd和callback,前者是获取文件的命令,格式为“RETR filename”,后者即callback为回调函数,一般为openfile.write,表示将相关数据流写入一个打开的文件,文件打开的方式取决于使用的retr method,例如retrbinary()可以使用'wb'打开的文件。

FTP数据上传:

相应的数据上传的函数就是以stor开头的两个函数:storbinary与storlines,依然推荐使用前者,二进制总是比较受信任的。

from ftplib import FTP
with FTP('<ftp server IP>','user','passwd') as c,\
	open('<remote ftpserver filename>','wb') as f:
	c.storbinary('STOR <local filename/fullpath_filename>',f)

同样的,上传文件的CMD格式为“STOR 文件名”。

需要注意的是retr函数使用的是callback函数来将要下载的文件写入到本地open的文件中,而stor函数则在server端打开一个文件,然后将要上传的数据写入。

其他:

关于FTP server常见的returncode,参考:https://kb.globalscape.com/Knowledgebase/10142/FTP-Status-and-Error-Codes

猜你喜欢

转载自www.cnblogs.com/leohahah/p/12704292.html