Получить список только корневых объектов (папок) в S3 - aws sdk v3 php
учитывая мое ведро S3, которое содержит изображения в такой структуре:
root/portraits/portrait_001.jpg
root/landscapes/landscape_001.jpg
где root - мое ведро, и в моем корне нет других файлов, только эти папки (объекты), как мне получить список только этих объектов?
portraits/
landscapes/
Я знаком с использованием разделителя и префикса в вызове ListObjects.
если я сделаю следующее, Я не получу никаких результатов:
$objects = $s3->getIterator('ListObjects', array(
'Bucket' => $bucket,
'Delimiter' => '/',
));
foreach($objects as $object)
echo $object['Key'] . "n";
если я не использую разделитель, я получаю все, очевидно.
Я не могу использовать префикс, потому что объекты, которые я хочу, являются корневыми. В противном случае у меня нет проблем с использованием префикса, чтобы сказать, перечислите только файлы в 'portraits/'
из моих поисков мне удалось найти решения только из предыдущих лет, которые применяются только к aws php sdk v1 или v2, и мне не повезло попробовать их (v3 совсем другой)
какие предложения? Я чувствую, что мне не хватает чего-то простого, но, просматривая документацию, я не могу найди что-нибудь, что поможет мне. В крайнем случае, мне просто придется придерживаться ручного объявления массива
$categories = ['portraits/', 'landscapes/']
но это не идеально в том случае, когда я хочу добавить больше категорий в будущем, и не нужно беспокоиться о добавлении другой категории вручную.
любая помощь будет высоко оценили :)
Изменить - Решение
Я, должно быть, искал в неправильных местах во время моих дампов объектов, но в конечном итоге увидел Общие префиксы в возвращаемом результате вызова ListObjects с разделителем'/', например:
$s3->listObjects(array('Bucket' => $bucket, 'Delimiter' => '/'));
1 ответов
каталоги фактически не существуют в Amazon S3. Однако консоль управления позволяет создавать папки, а пути поддерживаются, чтобы создать иллюзию каталогов.
например, object bar.jpg
хранящиеся в foo
каталог имеет путь /foo/bar.jpg
. Фокус в том, что объект на самом деле называется foo/bar.jpg
а не просто bar.jpg
. Большинство пользователей даже не заметят разницы.
из API, возможность перечисления каталогов предоставляется через понятие CommonPrefixes
, которые выглядят так же, как пути к каталогу и состоят из части имен объектов ("ключи") перед окончательной косой чертой.
посмотреть: перечисление ключей иерархически с использованием префикса и разделителя