Amazon web services 获取AWS S3 bucket中对象的所有版本?

Amazon web services 获取AWS S3 bucket中对象的所有版本?,amazon-web-services,amazon-s3,key,version,Amazon Web Services,Amazon S3,Key,Version,我已经在bucket上启用了对象版本控制。我想把钥匙的所有版本都放在那个桶里。但我找不到一个方法去做这件事;使用S3 API如何实现这一点?支持AWS按前缀获取所有对象版本,因此您可以将密钥用作前缀,它工作正常,请尝试。您可以使用AWS CLI从bucket获取所有版本的列表 aws s3api list-object-versions --bucket bucketname 使用python session = boto3.Session(aws_access_key_id, aws_sec

我已经在bucket上启用了对象版本控制。我想把钥匙的所有版本都放在那个桶里。但我找不到一个方法去做这件事;使用S3 API如何实现这一点?

支持AWS按前缀获取所有对象版本,因此您可以将密钥用作前缀,它工作正常,请尝试。

您可以使用AWS CLI从bucket获取所有版本的列表

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'))

所以,今天早上我碰到了这堵砖墙。事实证明,这件看似琐碎的事情非常难做到

您想要的API就是API,但遗憾的是,它的使用并不简单

首先,您必须避开一些非解决方案:
KeyMarker
,它由
boto3
作为

KeyMarker(string)——指定在bucket中列出对象时要开始的键

…在bucket中列出对象时,不以指定的键开头;相反,它在该键之后立即开始,这使得它在这里有些无用

此API提供的最佳限制是
前缀
;这并不是完美的,因为可能有一些键不是我们感兴趣的键,但却包含了我们的键

还要注意
MaxKeys
;我们很容易认为,从词典学的角度来看,我们的键应该是第一位的,所有以我们的键作为其键名前缀的键都会紧跟其后,因此我们可以使用
MaxKeys
对它们进行修剪;遗憾的是,
MaxKeys
控制的不是响应中返回的键数,而是版本数。(我想这是事先不知道的。)

因此,
前缀
似乎是最好的选择。还要注意的是,至少在某些语言中,客户端库不会为您处理分页,因此您还需要处理这个问题

例如,
boto3

response=client.list\u object\u版本(
Bucket=Bucket\u name,Prefix=key\u name,
)
尽管如此:
#进程的回应`
...
#检查结果是否已分页:
如果响应['IsTruncated']:
响应=client.list\u对象\u版本(
Bucket=Bucket\u name,Prefix=key\u name,
KeyMarker=响应['NextKeyMarker'],
VersionIdMarker=响应['NextVersionIdMarker'],
)
其他:
打破

由于这是一个与编程相关的网站,您可能需要提及您使用的编程语言,或者您使用的API类型。如果存在与您的前缀匹配的多元组对象,则这不起作用。两个对象
a/b
a/b?1
都将匹配
a/b