python - 使用 Python ftplib 的远程 FTP 服务器中文件的 MD5 值

标签 python ftp md5 file-transfer ftplib

使用 ftplib 将文件传输到服务器后,如何确定该文件的 MD5 与本地服务器中的文件的 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")

最佳答案

首先,确保您的远程服务器完全支持校验和计算。许多人没有。我相信甚至没有标准的 FTP 命令来计算远程文件的校验和。有很多提案,也有很多专有解决方案。
最新的提议是:
https://datatracker.ietf.org/doc/html/draft-bryan-ftpext-hash-02
一些可用于计算校验和的命令是: XSHA1 , XSHA256 , XSHA512 , XMD5 , MD5 , XCRCHASH .
你可以用 WinSCP FTP client 测试一下. WinSCP 支持所有前面提到的命令。测试其 checksum calculation function checksum scripting command .如果他们工作,enable logging并检查 WinSCP 对您的服务器使用的命令和语法。 (我是 WinSCP 的作者)
一旦你知道你的服务器支持什么命令(如果有),你可以使用 FTP.voidcmd method :

ftp.voidcmd("XSHA1 " + filename)

关于python - 使用 Python ftplib 的远程 FTP 服务器中文件的 MD5 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62081849/

相关文章:

python - tensorflow API 检测盒及评测

python - Mac 上的错误 : No module named psycopg2. 扩展

linux - 使用 SSH 更新 WordPress (Centos)

JavaScript MD5 哈希与 Java Applet MD5 哈希?

c# - 无法将类型 "int"隐式转换为 "bool"

Python:被要求输入两次并输出重复的打印语句

python - 如何将参数从 mock.patch 传递给 new_callable?

Java 和 FTP 编辑在线文本文件

css - 新上传后 Sprite 没有改变

python - 如何在 python 中用数字对之间的破折号格式化 MD5 哈希?