Скажем, у меня есть следующие каталоги и файлы в корзине Amazon S3 (файлы выделены полужирным шрифтом):
- bucketname /
- имя ведра / папка1 /
- bucketname / folder1 / foobar.txt
- имя ведра / папка1 / подпапка1 /
- bucketname / folder1 / subfolder1 / hello.txt
- имя ведра / папка1 / подпапка2 /
- bucketname / folder1 / subfolder2 / world.txt
- имя корзины / папка1 / подпапка2 / подпапка1 /
- bucketname / folder1 / subfolder2 / subsubfolder1 / file.txt
Как я могу перечислить все объекты и непосредственные подкаталоги данного каталога с помощью .NET AWS S3 API, не получая рекурсивно все, что находится ниже этого каталога? Другими словами, как я могу «просматривать» содержимое каталога на одном уровне?
Например, представьте, что я хочу просмотреть содержимое bucketname/folder1/
. Я бы хотел увидеть следующее:
- bucketname / folder1 / foobar.txt
- имя ведра / папка1 / подпапка1 /
- имя ведра / папка1 / подпапка2 /
...и ничего больше. Я не хочу перечислять файлы и каталоги в подкаталогах, я просто хочу перечислить файлы и подкаталоги на уровне folder1
.
Есть ли способ применить фильтры к одному вызову API AWS, чтобы он не возвращал все и заставлял меня вручную анализировать только то, что мне нужно?
Я обнаружил, что этот код позволяет мне получить только непосредственные подкаталоги (как и предполагалось), но я не могу понять, как включить немедленные файлы:
var request = new ListObjectsRequest()
.WithBucketName("bucketname")
.WithPrefix(@"folder1/")
.WithDelimiter(@"/");
using (var client = Amazon.AWSClientFactory.CreateAmazonS3Client(accessKey, secretKey))
using (var response = client.ListObjects(request))
{
foreach (var item in response.CommonPrefixes)
{
/* ... */
}
}