118 votes

Comment obtenir la somme md5 d'un fichier sur le S3 d'Amazon

Si j'ai des fichiers existants sur Amazon S3, quel est le moyen le plus simple d'obtenir leur md5sum sans avoir à télécharger les fichiers ?

27voto

Duncan Harris Points 136

ETag ne semble pas être MD5 pour les téléchargements en plusieurs parties (selon le commentaire de Gael Fraiteur). Dans ces cas, il contient un suffixe de moins et un nombre. Cependant, même le bit avant le moins ne semble pas être le MD5, même s'il est de la même longueur qu'un MD5. Peut-être le suffixe est-il le nombre de pièces téléchargées ?

14voto

li xin Points 37

Ci-dessous c'est le travail pour moi de comparer le total de contrôle de fichier local avec s3 etag. J'ai utilisé Python

def md5_checksum(filename):
    m = hashlib.md5()
    with open(filename, 'rb') as f:
        for data in iter(lambda: f.read(1024 * 1024), b''):
            m.update(data)
   
    return m.hexdigest()


def etag_checksum(filename, chunk_size=8 * 1024 * 1024):
    md5s = []
    with open(filename, 'rb') as f:
        for data in iter(lambda: f.read(chunk_size), b''):
            md5s.append(hashlib.md5(data).digest())
    m = hashlib.md5(b"".join(md5s))
    print('{}-{}'.format(m.hexdigest(), len(md5s)))
    return '{}-{}'.format(m.hexdigest(), len(md5s))

def etag_compare(filename, etag):
    et = etag[1:-1] # strip quotes
    print('et',et)
    if '-' in et and et == etag_checksum(filename):
        return True
    if '-' not in et and et == md5_checksum(filename):
        return True
    return False


def main():   
    session = boto3.Session(
        aws_access_key_id=s3_accesskey,
        aws_secret_access_key=s3_secret
    )
    s3 = session.client('s3')
    obj_dict = s3.get_object(Bucket=bucket_name, Key=your_key)

    etag = (obj_dict['ETag'])
    print('etag', etag)
    
    validation = etag_compare(filename,etag)
    print(validation)
    etag_checksum(filename, chunk_size=8 * 1024 * 1024)
    return validation

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X