Amazon S3 - это плоская система хранения объектов. Это не файловая система и не имеет понятия папок или каталогов. Скорее, Key
(имя файла) объекта содержит полный путь объекта.
Самый простой способ использовать S3 - это делать вид, что папки существуют, но на самом деле не создавать их. Например, вы можете скопировать файл в S3 следующим образом:
aws s3 cp a.txt s3://my-bucket/demo/app/a.txt
Это будет работать успешно, даже если нет каталога с именем demo
или app
, потому что каталоги / папки делают не существует .
Вместо этого Amazon S3 предоставляет концепцию CommonPrefix
, которую вы увидите в нижней части вызова API ListObjects()
. Возвращает список имен папок, разделенных разделителем (обычно /
). Это обеспечивает программную c эквивалентность директории, фактически не требуя их существования.
Если вы хотите sh представить серию иерархических каталогов, используйте список CommonPrefixes
для построения этого представления. Это будет работать, даже если нет файлов нулевой длины, потому что S3 смотрит на ключи объектов, а не на действительные каталоги.
Вот несколько примеров:
aws s3 cp a.txt s3://my-bucket/demo/app/a.txt
upload: ./a.txt to s3://my-bucket/demo/app/a.txt
aws s3api list-objects-v2 --bucket my-bucket
{
"Contents": [
{
"Key": "demo/app/a.txt",
"LastModified": "2020-04-22T01:11:20+00:00",
"ETag": "\"802776735eb3ddcf03962ae47e08ed13\"",
"Size": 211,
"StorageClass": "STANDARD"
}
]
}
aws s3api list-objects-v2 --bucket my-bucket --delimiter '/'
{
"CommonPrefixes": [
{
"Prefix": "demo/"
}
]
}
aws s3api list-objects-v2 --bucket jstack-b --delimiter '/' --prefix 'demo/'
{
"CommonPrefixes": [
{
"Prefix": "demo/app/"
}
]
}
Обратите внимание, как команды в конце укажите delimiter
, поэтому возвращается список CommonPrefixes
. Это способ, с помощью которого вы можете просмотреть список каталогов (которые не существуют).