Первое, что нужно понять в Amazon S3, это то, что folders do not exist
.Скорее, объекты хранятся с полным путем в виде их Key
(имя файла).
Например, я могу скопировать файл в корзину, используя Интерфейс командной строки AWS (CLI) :
aws s3 cp foo.txt s3://my-bucket/fo1/fo2/fo3/foo.txt
Это будет работать, даже если папки не существуют.
Чтобы сделать вещи удобными для людей, существует набор «притворных» папок, которые предоставляются через концепцию общий префикс .Таким образом, в консоли управления папки будут отображаться .Однако, если объект был затем удален с помощью:
aws s3 rm s3://my-buket/fo1/fo2/fo3/foo.txt
В результате папки сразу же исчезнут, поскольку их фактически никогда не существовало!
Также для удобства,некоторые команды Amazon S3 позволяют указывать Prefix
и Delimiter
.Это может использоваться, например, только для перечисления объектов в папке fo3
.На самом деле он просто перечисляет объекты, у которых Key
начинается с fo1/fo2/fo3/
.Когда Key
для объекта возвращается, у него всегда будет полный путь к объекту, потому что Key
на самом деле - это полный путь.(Не существует понятия имени файла, отдельного от полного Key
.)
Итак, если вы хотите получить список всех файлов в fo1
и fo2
и fo3
, вы можете сделатьперечисление с Prefix
из fo1
и получение всех объектов, которые начинаются с fo1/
, но это будет включать объекты в подпапках, поскольку все они имеют префикс fo1/
.
Итог: Вместо того, чтобы думать о старомодных каталогах, думайте о Amazon S3 как о плоской структуре хранения.При необходимости вы можете выполнить фильтрацию результатов в своем собственном коде.