使用PHP SDK下载存储在AWS S3上的对象的特定版本

时间:2017-05-10 09:13:15

标签: php symfony amazon-web-services amazon-s3 aws-sdk

我在我的symfony应用程序中使用亚马逊的PHP-SDK将文件(在s3语言中称为“对象”)上传到已启用版本控制的存储桶。因此,当我多次上传具有相同名称(又名“密钥”)的文件时,存储桶会保留该文件的一个对象,并具有多个版本。

这就是我的目的,因为我使用存储桶存储(版本化)应用程序的备份。

现在,当我想再次下载备份时,似乎亚马逊只让我下载默认对象(显然使用的是最新版本)。我无法在官方文档(或其他任何地方)中找到允许我下载特定版本的方法或示例(如:上周给我备份)。

这是预期的行为还是我错过了什么?如果这个限制是s3固有的,那么版本控制桶的整个点就是荒谬的。

最好的问候和感谢提前任何提示!

1 个答案:

答案 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