繁体   English   中英

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

[英]How to verify a successful upload if I use pysftp to transfer a file?

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

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

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

之后是否对文件执行 stat() 以确认文件大小

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

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


虽然这些天来,你不应该使用 pysftp,因为它已经死了。 请直接使用 Paramiko。 参见pysftp 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你会提到计算。) 然后,您必须为本地文件计算相同的校验和并进行比较。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM