1

Я реализую файловый менеджер поверх S3, и в настоящее время я пытаюсь реализовать бесшовное архивирование ледников с помощью LifeCycles. S3 сторона вещей с LifeCycles довольно прямолинейна. Однако я не могу найти метод, который вернет фактический класс хранения ключа. Это очевидно, поскольку панель управления S3 показывает это.Запрос класса хранения с AWS SDK

В документации по классам хранения они упоминают этот объект метаданных должен присутствовать (S3 Using Metadata): Класс хранения

х-AMZ-хранения класса, используемый для хранения объекта.

В документации по объекту headObject упоминается, что он должен возвращать метаданные, но когда я его запускаю, блок метаданных не возвращается.

Delete-Marker: "", 
Accept-Ranges: "bytes", 
Expiration: "", 
Restore: "", 
Last-Modified: "Mon, 08 Sep 2014 20:27:39 GMT", 
Content-Length: "3976807", 
ETag: "0359f81b950a395d3f4ee0bf****", 
Missing-Meta: "", 
Version-Id: "Mb96ZF0dm506eXP***", 
Cache-Control: "", 
Content-Disposition: "", 
Content-Encoding: "", 
Content-Language: "", 
Content-Type: "video/x-ms-wmv", 
Expires: "", 
Website-Redirect-Location: "", 
Server-Side-Encryption: "", 
SSECustomerAlgorithm: "", 
SSECustomerKeyMD5: "", 
Request-Id: "43AD99D48F****E" 

Между тем документация утверждает, что метаданные должны быть один из возвращаемых полей:

Metadata => (associative-array<string>) 
Associative array of <string> keys mapping to (string) values. Each array key should be changed to an appropriate <string>. 

A map of metadata to store with the object in S3. 
<string> => (string) 
The metadata value. 

FYI, я использую эту документацию AWS SDK for PHP

Любые советы ценится в настоящее время является единственным Решение, которое я нашел, - это либо запустить getObject (что невозможно, поскольку он загрузит весь объект), либо запустить объект restoreObject при каждом вызове и проверить его код исключения. Но это означает, что невозможно проверить статус ключа без его восстановления (если он заархивирован)

Спасибо.

ответ

2

Я был в состоянии получить его. Когда я побежал следующий код:

$s3 = \Aws\S3\S3Client::factory($config); 
$result = $s3->listObjects(array(
    'Bucket' => 'somebucket' 
)); 
echo $result; 

Я получил этот вывод и содержит Класс складирования:

[Name] => soembucket 
[Prefix] => Array 
    (
    ) 

[Marker] => Array 
    (
    ) 

[MaxKeys] => 1000 
[IsTruncated] => 
[Contents] => Array 
    (
     [0] => Array 
      (
       [Key] => e2014090520140911a.jpg 
       [LastModified] => 2014-09-04T21:06:49.000Z 
       [ETag] => "7ae0adc21a443ab8d4499cabaa54157b" 
       [Size] => 101961 
       [Owner] => Array 
        (
         [ID] => 8c1a9525cee6d6caa294e524b4bb1d28481e53473cc48a26e714e89665cb7afc 
         [DisplayName] => amazon_aws 
        ) 

       [StorageClass] => STANDARD 
      ) 

     [1] => Array 
      (
       [Key] => e2014091220141002a.jpg 
       [LastModified] => 2014-09-11T21:19:33.000Z 
       [ETag] => "96882d755e7864bd01d75cb24673fb00" 
       [Size] => 219311 
       [Owner] => Array 
        (
         [ID] => 8c1a9525cee6d6caa294e524b4bb1d28481e53473cc48a26e714e89665cb7afc 
         [DisplayName] => amazon_aws 
        ) 

       [StorageClass] => STANDARD 
      ) 

    ) 

[EncodingType] => 
[RequestId] => 30BB77F212066343 
+0

Я предполагаю, что я мог бы просто listBucket с моим ключом и получить оттуда Класс складирования. Спасибо, я загляну в него – maddios

+0

Отлично, это действительно работает. Кажется немного странным, что голова не получает эту информацию, но я могу жить с этим :) – maddios