Значение MD5 для файла на удаленном FTP-сервере с использованием Python ftplib - PullRequest
1 голос
/ 29 мая 2020

После передачи файла на сервер с помощью 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()
server_file_hash = hashlib.md5(open(filename, 'rb').read()).hexdigest() #not sure how to achieve this 

if local_file_hash == server_file_hash:
     print("Successful transfer")
else:
     print("Failure transfer")

1 Ответ

1 голос
/ 29 мая 2020

Во-первых, убедитесь, что ваш удаленный сервер вообще поддерживает вычисление контрольной суммы. Многие этого не делают. Я считаю, что нет даже стандартной команды FTP для вычисления контрольной суммы удаленного файла. Было много предложений и много проприетарных решений.

Последнее предложение:
https://tools.ietf.org/html/draft-bryan-ftpext-hash-02

Некоторые команды, которые можно использовать для расчета контрольные суммы: XSHA1, XSHA256, XSHA512, XMD5, MD5, XCRC и HASH.

Вы можете проверить это с помощью FTP-клиента WinSCP . WinSCP поддерживает все ранее упомянутые команды. Протестируйте его функцию вычисления контрольной суммы или команду сценария checksum . Если они работают, включите ведение журнала и проверьте, какую команду и какой синтаксис WinSCP использует против вашего сервера. (я автор WinSCP)

Как только вы узнаете, какую команду поддерживает ваш сервер (если есть), вы можете использовать FTP.voidcmd метод :

ftp.voidcmd("XSHA1 " + filename)
...