我在我的symfony应用程序中使用亚马逊的PHP-SDK将文件(在s3语言中称为“对象”)上传到已启用版本控制的存储桶。因此,当我多次上传具有相同名称(又名“密钥”)的文件时,存储桶会保留该文件的一个对象,并具有多个版本。
这就是我的目的,因为我使用存储桶存储(版本化)应用程序的备份。
现在,当我想再次下载备份时,似乎亚马逊只让我下载默认对象(显然使用的是最新版本)。我无法在官方文档(或其他任何地方)中找到允许我下载特定版本的方法或示例(如:上周给我备份)。
这是预期的行为还是我错过了什么?如果这个限制是s3固有的,那么版本控制桶的整个点就是荒谬的。
最好的问候和感谢提前任何提示!
答案 0 :(得分:1)
这是一个两步过程。您必须通过此api调用获取所有版本的列表。
http://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#listobjectversions
$result = $client->listObjectVersions([
'Bucket' => '<string>', // REQUIRED
]);
返回
[
'CommonPrefixes' => [
[
'Prefix' => '<string>',
],
// ...
],
'DeleteMarkers' => [
[
'IsLatest' => true || false,
'Key' => '<string>',
'LastModified' => <DateTime>,
'Owner' => [
'DisplayName' => '<string>',
'ID' => '<string>',
],
'VersionId' => '<string>',
],
// ...
],
'Delimiter' => '<string>',
'EncodingType' => 'url',
'IsTruncated' => true || false,
'KeyMarker' => '<string>',
'MaxKeys' => <integer>,
'Name' => '<string>',
'NextKeyMarker' => '<string>',
'NextVersionIdMarker' => '<string>',
'Prefix' => '<string>',
'VersionIdMarker' => '<string>',
'Versions' => [
[
'ETag' => '<string>',
'IsLatest' => true || false,
'Key' => '<string>',
'LastModified' => <DateTime>,
'Owner' => [
'DisplayName' => '<string>',
'ID' => '<string>',
],
'Size' => <integer>,
'StorageClass' => 'STANDARD',
'VersionId' => '<string>',
],
// ...
],
]
然后在GetObject api调用中设置VersionId参数
$result = $client->getObject([
'Bucket' => '<string>', // REQUIRED
'VersionId' => '<string>',
]);`
http://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#getobject