實(shí)現(xiàn)了可以訪問(wèn)ftp服務(wù),需要在ftp服務(wù)器上進(jìn)行文件的上傳和下載。
下載測(cè)試:
最開(kāi)始因?yàn)榉?wù)器端的帶寬限制,下載的速度在1M/S。提升了帶寬速度后,下載速度提升到15M/S。
用python做速度測(cè)試,起一個(gè)測(cè)速線程進(jìn)行測(cè)試。
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()
多線程下載:
因?yàn)橐婚_(kāi)始的帶寬有限,為了提高速度,在git上找到一個(gè)多線程ftp下載的代碼 git地址 分片下載,最后合并,速度提升還是挺快的, 就是如果線程數(shù)太多,帶寬有限制,會(huì)出現(xiàn)線程執(zhí)行不均勻的情況,需要合理安排線程數(shù)量。
下載完成后,要對(duì)下載下來(lái)的文件進(jìn)行解密和解壓。
tar -jcvf - ./20171226 | openssl des3 -salt -k '**********' | dd of=20171226.bz2.des3
使用tar解壓過(guò)程失敗。最后換成
zip -r -P '******' 20171227.zip 20171227
剩下就是ftp二進(jìn)制上傳和下載的代碼,網(wǎng)上說(shuō):
中文路徑問(wèn)題:由于FTP支持ASCII編碼,Python ftplib中編碼方式使用latin-1,而window默認(rèn)編碼方式為gbk,所以使用Python處理時(shí)需先將中文路徑編碼為gbk之后譯碼為latin-1字符;
上傳下載使用storline和retrline,對(duì)應(yīng)二進(jìn)制使用storbinary和retrbinary。對(duì)于stor類函數(shù)后面的參數(shù)fp表示接收一個(gè)文件對(duì)象,支持read方法,一般為打開(kāi)需要上傳的源文件,而retr類函數(shù)后面的參數(shù)表示對(duì)于返回?cái)?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()