2017-05-10 59 views
0

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

这就是我所要做的行为,因为我使用存储区来存储应用程序的版本化备份。

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

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

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

回答

0

这是一个两步过程。您将不得不通过此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>', 
     ], 
     // ... 
    ], 
] 

然后设置VERSIONID参数GetObject这个API调用

$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

相关问题