我启用了一个桶版本。我想获得一个密钥的所有版本。但我找不到方法去做这件事。有人可以帮帮我吗?
答案 0 :(得分:1)
AWS支持通过前缀获取所有对象版本,因此您可以使用您的密钥作为此前缀,它可以正常工作,请尝试。
答案 1 :(得分:0)
我会看看Amazon S3 documentation.您需要列出该对象的所有版本,然后遍历列表。
答案 2 :(得分:0)
您可以使用AWS CLI获取存储桶中所有版本的列表
aws s3api list-object-versions --bucket bucketname
使用python,
session = boto3.Session(aws_access_key_id, aws_secret_access_key)
s3 = session.client('s3')
bucket_name = 'bucketname'
versions = s3.list_object_versions (Bucket = bucket_name)
print(versions.get('Versions'))
答案 3 :(得分:0)
所以,今天早上我碰到了这堵砖墙。事实证明,这看似微不足道的事情很难做到。
您想要的API是GET Bucket Object versions API,但遗憾的是使用起来并不平凡。
首先,您必须避免一些非解决方案:KeyMarker
,它由boto3
记录为
KeyMarker (字符串)-指定列出存储桶中的对象时要开始的键。
…列出存储桶中的对象时,不以指定的键开头;相反,它会在该键后 后立即开始,这使它在这里有点用处。
此API提供的最佳限制是Prefix
;这并不是一个完美的选择,因为可能有一些钥匙不是我们感兴趣的钥匙,但仍然包含我们的钥匙。
还要提防MaxKeys
;从字典上讲,我们很容易想到我们的密钥应该是第一个,并且所有以我们的密钥作为其密钥名称前缀的密钥都将跟随,因此我们可以使用MaxKeys
对其进行修整;可悲的是,MaxKeys
并不控制响应中返回多少键,而是控制版本数。 (而且我想这是事先不知道的。)
因此,Prefix
似乎是最好的。另外请注意,至少在某些语言中,客户端库不会为您处理分页,因此您还需要处理它。
以boto3
中的示例为例:
response = client.list_object_versions(
Bucket=bucket_name, Prefix=key_name,
)
while True:
# Process `response`
...
# Check if the results got paginated:
if response['IsTruncated']:
response = client.list_object_versions(
Bucket=bucket_name, Prefix=key_name,
KeyMarker=response['NextKeyMarker'],
VersionIdMarker=response['NextVersionIdMarker'],
)
else:
break