ftplib实现FTP上传与下载的功能
ftp server默认的端口号为21。
本文参考地址:
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
上一篇: 什么是怪异盒模型
下一篇: 图解Java设计模式之迭代器模式