如何在 Python 中恢复中断的 FTP 上传
How can I resume interrupted FTP upload in Python
我需要手动中断 FTP 上传,然后测试我是否可以恢复上传。我正在使用 Python 的 ftplib 模块。
我试过下面的代码:
# Consider I have logged in using valid ftp user
# File is of 20 MB
counter = 0
file_name = 'test.dat'
ftp_dir = 'test_ftp_dir'
with open(file_address, 'rb') as file:
ftp.set_debuglevel(2)
ftp.cwd(ftp_dir)
ftp.voidcmd('TYPE I')
with ftp.transfercmd(f'STOR {file_name}', None) as conn:
while True:
# Read 1 MB
buf = file.read(1000000)
if not buf:
break
conn.sendall(buf)
counter += 1
if counter == 5:
# Stop after 5 MB
LOG.info("STEP-3: Abort client transfer")
break
# Reading file again and logging again using the ftp user
with open(file_address, 'rb') as file:
ftp.set_debuglevel(2)
ftp.cwd(ftp_dir)
ftp.voidcmd('TYPE I')
ftp.storbinary(f'STOR {file_name}', file, rest=ftp.size(file_name))
它不是从 5 MB 重新开始上传,而是在附加到原始文件的同时发送完整文件。假设我发送了 5 MB 的文件,然后我可以看到 5 MB 的文件,当我尝试恢复它时,它发送了整个 20 MB 的文件,使它成为一个总计 25 MB 的文件。请帮我解决这个问题。谢谢
在开始传输之前,您必须将源本地文件搜索到重启位置:
# Reading file again and logging again using the ftp user
with open(file_address, 'rb') as file:
rest = ftp.size(file_name)
file.seek(rest)
ftp.cwd(ftp_dir)
ftp.storbinary(f'STOR {file_name}', file, rest=rest)
ftplib 不会为您寻找文件,这会限制其使用。在某些情况下,您不希望它寻找。还有不支持seeking的类文件对象
有关可续传 FTP 上传的完整代码,请参阅:
Handling disconnects in Python ftplib FTP transfers file upload
我需要手动中断 FTP 上传,然后测试我是否可以恢复上传。我正在使用 Python 的 ftplib 模块。 我试过下面的代码:
# Consider I have logged in using valid ftp user
# File is of 20 MB
counter = 0
file_name = 'test.dat'
ftp_dir = 'test_ftp_dir'
with open(file_address, 'rb') as file:
ftp.set_debuglevel(2)
ftp.cwd(ftp_dir)
ftp.voidcmd('TYPE I')
with ftp.transfercmd(f'STOR {file_name}', None) as conn:
while True:
# Read 1 MB
buf = file.read(1000000)
if not buf:
break
conn.sendall(buf)
counter += 1
if counter == 5:
# Stop after 5 MB
LOG.info("STEP-3: Abort client transfer")
break
# Reading file again and logging again using the ftp user
with open(file_address, 'rb') as file:
ftp.set_debuglevel(2)
ftp.cwd(ftp_dir)
ftp.voidcmd('TYPE I')
ftp.storbinary(f'STOR {file_name}', file, rest=ftp.size(file_name))
它不是从 5 MB 重新开始上传,而是在附加到原始文件的同时发送完整文件。假设我发送了 5 MB 的文件,然后我可以看到 5 MB 的文件,当我尝试恢复它时,它发送了整个 20 MB 的文件,使它成为一个总计 25 MB 的文件。请帮我解决这个问题。谢谢
在开始传输之前,您必须将源本地文件搜索到重启位置:
# Reading file again and logging again using the ftp user
with open(file_address, 'rb') as file:
rest = ftp.size(file_name)
file.seek(rest)
ftp.cwd(ftp_dir)
ftp.storbinary(f'STOR {file_name}', file, rest=rest)
ftplib 不会为您寻找文件,这会限制其使用。在某些情况下,您不希望它寻找。还有不支持seeking的类文件对象
有关可续传 FTP 上传的完整代码,请参阅:
Handling disconnects in Python ftplib FTP transfers file upload