首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用的远程FTP服务器中文件的MD5值

使用的远程FTP服务器中文件的MD5值
EN

Stack Overflow用户
提问于 2020-05-29 08:35:03
回答 2查看 1.5K关注 0票数 4

使用ftplib将文件传输到服务器后,如何将该文件的MD5确定为本地服务器中的文件?

代码语言:javascript
运行
复制
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")
EN

回答 2

Stack Overflow用户

发布于 2020-05-29 09:02:22

首先,确保远程服务器完全支持校验和计算。很多人不知道。我相信甚至没有标准的FTP命令来计算远程文件的校验和。有许多建议和许多专有解决方案。

最新的建议是:

https://datatracker.ietf.org/doc/html/draft-bryan-ftpext-hash-02

可以用来计算校验和的命令有:XSHA1XSHA256XSHA512XMD5MD5XCRCHASH

您可以使用WinSCP FTP客户端对其进行测试。WinSCP支持前面提到的所有命令。测试它的校验和计算函数脚本命令。如果它们工作,启用日志和check,什么命令以及WinSCP对您的服务器使用什么语法。(我是WinSCP的作者)

一旦您发现服务器支持什么命令(如果有的话),就可以使用方法

代码语言:javascript
运行
复制
ftp.voidcmd("XSHA1 " + filename)
票数 2
EN

Stack Overflow用户

发布于 2022-08-10 20:45:52

我遇到了类似的问题,并遇到了以下解决方案,无论服务器命令是否可行,该解决方案都能工作。

来源:https://smithje.github.io/python/2013/07/02/md5-over-ftp

简而言之,可以使用.retrbinary并将其加载到Hash对象中:

代码语言:javascript
运行
复制
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()
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62081849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档