方法一:使用requests下載文件,再上傳
思路:requets下載文件,然后再上傳
下載文件代碼:
class Download:
def __init__(self, url: str):
self.url = url
self.count = 1 # 處理 FTP 一直循環(huán)讀取文件的bug
@property
def name(self):
if self.url:
url_list = self.url.split('/')
return url_list[-1]
return ''
def download_image(self):
data = b''
if not self.count:
return data
resp = requests.get(self.url)
if str(resp.status_code).startswith('2'):
context = resp.content
data = context
self.count -= 1
return data
def read(self, *args, **kwargs) -> bytes:
"""
模擬讀取本地文件
:param args:
:param kwargs:
:return:
"""
return self.download_image()
然后調(diào)用 ftp上傳代碼方法,傳到需要的路徑,完成復(fù)制
方法二:使用ftp模塊下載,然后再上傳
思路:使用ftp模塊的上傳和下載方法的組合體,完成下載數(shù)據(jù)到內(nèi)存再上傳到指定路徑,完成復(fù)制文件到指定路徑
實現(xiàn)方法:
def ftp_copy(source_ftp, source_name, target_ftp, target_name, blocksize=8192, rest=None, type='I'):
"""
復(fù)制 FTP 圖片到另一個 FTP 服務(wù)器下
:param source_ftp: 源 FTP
:param source_name: 源圖片
:param target_ftp: 目標(biāo) FTP
:param target_name: 目標(biāo)圖片
:param blocksize:
:param rest:
:param type:
:return:
"""
target_ftp.ftp.voidcmd('TYPE I')
target_ftp.change_path(target_name)
target_ftp.change_path('/')
source_ftp.change_path('/')
with target_ftp.ftp.transfercmd('STOR ' + target_name, rest) as save_conn:
with source_ftp.ftp.transfercmd("RETR %s" % source_name, rest) as read_conn:
while 1:
data = read_conn.recv(blocksize) # 下載文件
if not data:
break
save_conn.sendall(data) # 上傳文件
# shutdown ssl layer
if _SSLSocket is not None and isinstance(read_conn, _SSLSocket):
read_conn.unwrap()
if _SSLSocket is not None and isinstance(save_conn, _SSLSocket):
save_conn.unwrap()
t = target_ftp.ftp.voidresp()
s = source_ftp.ftp.voidresp()
return t, s
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。