使用ftplib将文件传输到服务器后,如何将该文件的MD5确定为本地服务器中的文件?
from ftplib import FTP
import hashlib
ftp = FTP('server')
ftp.login('username','password')
ftp.cwd('path_to_upload')
file_to_upload = open(file,'rb')
filename = os.path.basename(file)
ftp.storbinary('STOR ' + filename, file_to_upload)
local_file_hash = hashlib.md5(open(file, 'rb').read()).hexdigest()
# not sure how to achieve this
server_file_hash = hashlib.md5(open(filename, 'rb').read()).hexdigest()
if local_file_hash == server_file_hash:
print("Successful transfer")
else:
print("Failure transfer")发布于 2020-05-29 09:02:22
首先,确保远程服务器完全支持校验和计算。很多人不知道。我相信甚至没有标准的FTP命令来计算远程文件的校验和。有许多建议和许多专有解决方案。
最新的建议是:
https://datatracker.ietf.org/doc/html/draft-bryan-ftpext-hash-02
可以用来计算校验和的命令有:XSHA1、XSHA256、XSHA512、XMD5、MD5、XCRC和HASH。
您可以使用WinSCP FTP客户端对其进行测试。WinSCP支持前面提到的所有命令。测试它的校验和计算函数或脚本命令。如果它们工作,启用日志和check,什么命令以及WinSCP对您的服务器使用什么语法。(我是WinSCP的作者)
一旦您发现服务器支持什么命令(如果有的话),就可以使用方法
ftp.voidcmd("XSHA1 " + filename)发布于 2022-08-10 20:45:52
我遇到了类似的问题,并遇到了以下解决方案,无论服务器命令是否可行,该解决方案都能工作。
来源:https://smithje.github.io/python/2013/07/02/md5-over-ftp
简而言之,可以使用.retrbinary并将其加载到Hash对象中:
import ftplib
import hashlib
def get_ftp_md5(ftp, remote_path):
m = hashlib.md5()
ftp.retrbinary(f'RETR {remote_path}', m.update)
return m.hexdigest()https://stackoverflow.com/questions/62081849
复制相似问题