ftplib實現FTP上傳與下載的功能


FTP server默認的端口號為21,20端口用於數據傳輸。

本文參考地址: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/local 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('<local filename/local fullpath_filename>','rb') as f:
	c.storbinary('STOR <remote filename/remote fullpath_filename>',f)

 

同樣的,上傳文件的CMD格式為“STOR 文件名”。

需要注意的是retr函數使用的是callback函數來將要下載的文件寫入到本地open的文件中,而stor函數則在server端打開一個文件,然后將要上傳的數據寫入。

其他:

關於FTP server常見的returncode,參考:https://kb.globalscape.com/Knowledgebase/10142/FTP-Status-and-Error-Codes

python2時FTP()對象可以不包含可以使用with子句的__enter__,__exit__方法,可以使用如下方式變通:

c = FTP('<ftp server IP>','user','passwd')
...
c.quit()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM