У меня проблема с загрузкой больших файлов и я нашел пригодный для использования метод ContentMD5, чтобы предоставить подтверждение переноса
Я начал с файла client.upload_file.Этот метод не имеет параметра ContentMD5.Поэтому я попытался использовать функцию для генерации локального ETag для файла и проверки его с помощью переданного файла.
Я обнаружил, что если вы используете шифрование KMS в вашей корзине S3, ваш etag как-то зависит от KMSи локальный сгенерированный ETag не равен тому в S3.
Вторая попытка использовала Object.put.Здесь вы можете использовать ContentMD5, и KMS также работает, но функция использует один поток для загрузки, а не mutltipart.отдельные потоки не могут загружать большие файлы.
Так что теперь я застрял.Существует функция создания MultiPart и upload_part, но я не могу найти никаких примеров с ContentMD5 в целом.
, который был попыткой Object.put
binary_hash = hashlib.md5(open(file_name,'rb').read()).digest()
file_md5 = base64.b64encode(binary_hash)
metadata = {
"md5sum": file_md5
}
try:
obj = s3_resource.Object(bucket, fileobj)
obj.put(
Body=open(file_name, 'rb'),
ContentMD5=file_md5,
Metadata=metadata,
ServerSideEncryption='aws:kms',
SSEKMSKeyId=s3kmskey)