Запрос класса хранилища с помощью AWS SDK

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

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

x-amz-storage-class Класс хранилища, используемый для хранения объекта.

В документации 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.

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

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

Спасибо.


person maddios    schedule 16.09.2014    source источник


Ответы (1)


Я смог получить его. Когда я запустил следующий код:

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

Я получил этот вывод, и он содержит StorageClass:

[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
person Peter Pei Guo    schedule 16.09.2014
comment
Думаю, я мог бы просто перечислитьBucket с помощью своего ключа и получить оттуда StorageClass. Спасибо, я посмотрю - person maddios; 16.09.2014
comment
Отлично, это работает. Кажется немного странным, что голова не получает эту информацию, но я могу жить с этим :) - person maddios; 16.09.2014