我需要计算保存在s3桶中的文件的md5值。我知道我可以将它们下载到onprem服务器并在那里进行操作,但我希望保持我的onprem服务器尽可能小,并且我的一些s3文件很大(500MB以上)。所以我已经开始开发一个lambda python函数来处理这个,但我不知道如何通过文件块,所以我可以生成md5值。这里是代码,期待您提供的任何帮助。
def s3_md5sum(bucket_name, object_key):
try:
md5Object = s3object.Object(bucket_name, object_key)
body = md5Object.get()['Body'].read()
except ClientError:
raise
else:
md5_obj = hashlib.md5()
while True:
buffer = body.read(8096)
if not buffer:
break
md5_obj.update(buffer)
hash_code = md5_obj.hexdigest()
md5 = str(hash_code).lower()
return md5
您可以将文件作为流读取,而不是尝试在内存中读取整个文件。然后,您可以使用hashlib库根据流的块创建MD5。在这个SO问题中可以找到一个例子。