實現(xiàn)了可以訪問ftp服務(wù)倦踢,需要在ftp服務(wù)器上進行文件的上傳和下載求冷。
下載測試:
最開始因為服務(wù)器端的帶寬限制,下載的速度在1M/S翰撑。提升了帶寬速度后罩旋,下載速度提升到15M/S。
用python做速度測試眶诈,起一個測速線程進行測試涨醋。
def seeFile(localfilename):
sizebuff = 0
while True:
time.sleep(1)
size = os.path.getsize(localfilename)
print size - sizebuff
sizebuff = size
subThread = threading.Thread(target = seeFile, args = ('aaa.txt',))
subThread.start()
多線程下載:
因為一開始的帶寬有限,為了提高速度逝撬,在git上找到一個多線程ftp下載的代碼 git地址 分片下載浴骂,最后合并,速度提升還是挺快的宪潮, 就是如果線程數(shù)太多溯警,帶寬有限制,會出現(xiàn)線程執(zhí)行不均勻的情況狡相,需要合理安排線程數(shù)量梯轻。
下載完成后,要對下載下來的文件進行解密和解壓尽棕。
tar -jcvf - ./20171226 | openssl des3 -salt -k '**********' | dd of=20171226.bz2.des3
使用tar解壓過程失敗喳挑。最后換成
zip -r -P '******' 20171227.zip 20171227
剩下就是ftp二進制上傳和下載的代碼,網(wǎng)上說:
中文路徑問題:由于FTP支持ASCII編碼滔悉,Python ftplib中編碼方式使用latin-1,而window默認(rèn)編碼方式為gbk伊诵,所以使用Python處理時需先將中文路徑編碼為gbk之后譯碼為latin-1字符;
上傳下載使用storline和retrline回官,對應(yīng)二進制使用storbinary和retrbinary曹宴。對于stor類函數(shù)后面的參數(shù)fp表示接收一個文件對象,支持read方法孙乖,一般為打開需要上傳的源文件浙炼,而retr類函數(shù)后面的參數(shù)表示對于返回數(shù)據(jù)的處理方法。
# 下載
fp = open("20171227.zip", 'wb')
ftp.retrbinary("RETR 20171227.zip", fp.write)
# 上傳
fp = open("20171227.zip", 'rb')
ftp.storbinary('STOR 20171227.zip', fp)
fp.close()