Amazon web services 获取AWS S3 bucket中对象的所有版本?
我已经在bucket上启用了对象版本控制。我想把钥匙的所有版本都放在那个桶里。但我找不到一个方法去做这件事;使用S3 API如何实现这一点?支持AWS按前缀获取所有对象版本,因此您可以将密钥用作前缀,它工作正常,请尝试。您可以使用AWS CLI从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
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
。