连接失败后恢复SFTP下载pysftp / paramiko

问题描述

我正在尝试使用pysftp / paramiko构建一个简单的SFTP客户端。

如果传输中断,例如如果连接失败?有没有一种方法可以重新开始传输,找到文件已经存在然后从中断处开始传输更多数据?

我在任一模块的文档中都找不到关于此的任何明确信息。与OpenSSH中的reget命令相似吗?

解决方法

Paramiko和pysftp都不支持传输恢复。但是,如果您查看SFTPClient.get implementation,应该很容易实现简历。应该执行以下操作:

if os.path.isfile(localpath):
    localsize = os.stat(localpath)
else
    localsize = 0
remotesize = sftp.stat(remotepath).st_size
if localsize < remotesize:
    with open(localpath,"ab") as fl,sftp.open(remotepath,"rb") as fr:
        if localsize > 0:
            fr.seek(localsize)
        fr.prefetch(remotesize)
        sftp._transfer_with_callback(
            reader=fr,writer=fl,file_size=remotesize,callback=None)