当前位置: 移动技术网 > IT编程>脚本编程>Python > ftplib实现FTP上传与下载的功能

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

2020年04月15日  | 移动技术网IT编程  | 我要评论

帅同社区,战国basara3宴,大傻车网

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网