2017-05-10 89 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

相關問題