У меня есть следующее ведро файла S3:
BucketName
- folder1
- usa
- file1.zip
- file2.zip
- canada
- file1.zip
- file2.zip
- usa
Есть ли способ получить содержимое (т.е. перечислить ключи) из пути BucketName / folder1 /, который даст мне файлы объектов **usa**
и **canada**
в 1 запросе к S3.
В настоящее время у меня есть следующий код, который делает 2 запроса к S3, которых я пытаюсь избежать, чтобы получить все файлы для каждой из двух стран:
public List<string> GetShapefiles(string country)
{
var s3Request = new ListObjectsV2Request
{
BucketName = BucketName,
Delimiter = "/"
};
if (country == "US")
{
s3Request.Prefix = "BucketName/folder1/usa/";
return GetShapeFileList(s3Request);
}
else if (country == "Canada")
{
s3Request.Prefix = "BucketName/folder1/canada/";
return GetShapeFileList(s3Request);
}
}
private List<string> GetShapeFileList(ListObjectsV2Request request)
{
var result = new List<string>();
ListObjectsV2Response response;
do
{
response = S3_CLIENT.ListObjectsV2Async(request).Result;
foreach (var file in response.S3Objects.Where(f => f.Key.LastIndexOf('/') != f.Key.Length - 1))
{
result.Add(file.Key);
}
request.ContinuationToken = response.NextContinuationToken;
} while (response.IsTruncated);
return result;
}
Поэтому в идеале я хотел бы сделать только один запрос, который предоставит мне все zip-файлы для США и Канады, например:
/usa/file1.zip
/usa/file2.zip
/canada/file1.zip
/canada/file2.zip