S.K*_*kat 4 checksum amazon-s3
有一种场景,我需要验证存储在 s3 存储桶中的文件的校验和(md5)。这可以在上传文件时通过在 api 调用的元数据中指定校验和值来实现。但就我而言,我想在以编程方式将数据放入存储桶后验证校验和。S3 中的每个对象都有一个名为“ETag”的属性,它是 S3 计算的 md5 校验和。
无论如何要获取特定对象的 ETag 并在 python 脚本中使用 boto3 客户端比较存储在 s3 中的本地文件和文件的校验和?
Boto3 api 提供了一种获取存储在 s3 中的对象的元数据的方法。以下代码段将有助于以编程方式获取元数据:
>>> s3_cli = boto3.client('s3')
>>> s3_resp = s3_cli.head_object(Bucket='ventests3', Key='config/ctl.json')
>>> print pprint.pprint(s3_resp)
>>> pp.pprint(s3_resp)
{u'AcceptRanges': 'bytes',
u'ContentLength': 4325,
u'ContentType': 'binary/octet-stream',
u'ETag': '"040c003386f1e2001816d32f2125d07a"',
u'LastModified': datetime.datetime(2018, 9, 20, 7, 15, 3, tzinfo=tzutc()),
u'Metadata': {},
'ResponseMetadata': {'HTTPHeaders': {'accept-ranges': 'bytes',
'content-length': '4325',
'content-type': 'binary/octet-stream',
'date': 'Thu, 20 Sep 2018 07:20:53 GMT',
'etag': '"040c003386f1e2001816d32f2125d07a"',
'last-modified': 'Thu, 20 Sep 2018 07:15:03 GMT',
'server': 'AmazonS3',
'x-amz-id-2': 'P2wapOciWCKPfol2sBgoo11tRdr4KwKcDJ/nHW7LZn00mvKfMYyfAPPV2tIcf3Vu+lrV57NBARY=',
'x-amz-request-id': '42AF970E7C9AA18C'},
'HTTPStatusCode': 200,
'HostId': 'P2wapOciWCKPfol2sBgoo11tRdr4KwKcDJ/nHW7LZn00mvKfMYyfAPPV2tIcf3Vu+lrV57NBARY=',
'RequestId': '42AF970E7C9AA18C',
'RetryAttempts': 0}}
>>> s3obj_etag = s3_resp['ETag'].strip('"')
>>> print s3obj_etag
'040c003386f1e2001816d32f2125d07a'
Run Code Online (Sandbox Code Playgroud)
s3 客户端对象中的head_object()方法将获取存储在 s3 存储桶中的给定对象的元数据(标头)。
小智 5
不要使用存储桶中对象的 ETag 来确定另一个存储桶中对象的对象等效性(具有相同的键)。在一些实验中,我发现对于大对象,ETag 在不同区域之间不一致。例如,us-east-1 中存储桶中的大文件在复制到 us-east-2 时可能具有不同的 ETag。ETag 值从桶到桶的一致性因对象而异。我看到一些大型对象在两个区域中确实具有相同的 ETag。我使用其中的 md5sum 创建自己的标签,当我将一个对象从一个存储桶复制到另一个存储桶时,我也会复制这些标签。
归档时间: |
|
查看次数: |
6946 次 |
最近记录: |