如果我使用ftp传输文件,如何验证上传成功?



我正在使用pysftp通过网络传输文件。我想确保这个过程的可靠性。在psftp中有一个putAPI,它返回一个包含传输文件大小的SFTPAttributes对象。我的意思是,通过比较大小,是否足以验证转账成功?

还是……在我看来,我也可以打开传输的文件,并使用check方法…这是正确的方式吗?我只是有点困惑。谢谢你。

psftpConnection.put已经检查了上传文件的大小。这就是confirm=True参数的作用,您不需要再做任何事情:

是否在文件上执行stat()来确认文件大小

当你可以用SFTPFile.check理论上验证校验和,通常它不会工作,因为大多数SFTP服务器,包括广泛的OpenSSH,不支持计算校验和。因此调用将失败。您将不得不求助于运行一些shell命令来计算校验和。参见:
在Python中比较下载文件和SFTP服务器上文件的MD5

但是值得怀疑的是,它是否值得努力,参见:
如何在SFTP文件传输期间执行校验和以确保数据完整性?


尽管这些天,你不应该使用pysftp,因为它已经死了。直接使用Paramiko代替。参见psyftp vs. Paramiko。查看关于Paramiko的基本相同的问题:如何检查Paramiko是否成功将文件上传到SFTP服务器?

虽然检查文件大小已经是成功传输的一个很好的指标,但它不会告诉您是否有位翻转,因此远程文件不具有完全相同的内容。因此,您应该使用校验和,例如由像md5这样的哈希算法提供,参见https://en.wikipedia.org/wiki/MD5。

基本上这就是你提到的check方法(https://docs.paramiko.org/en/latest/api/sftp.html?highlight=paramiko.sftp_file.sftpfile#paramiko.sftp_file.SFTPFile.check)将计算的内容。然后必须为本地文件计算相同的校验和并进行比较。

最新更新