仅使用 1 个请求 [C# AWSSDK] 检索 2 个 S3 对象及其内容

Retrieve 2 S3 objects and their content using only 1 request [C# AWSSDK]

我有以下文件 S3 存储桶:

“桶名”

有没有一种方法可以从“BucketName/folder1/”路径中检索内容(即列出键),这将为我提供 **usa****canada** 对象的文件在对 S3 的 1 个请求中。

目前,我有以下代码向 S3 发出 2 个请求,我试图避免检索这 2 个国家/地区的所有文件:

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;
}

理想情况下,我只想提出 1 个请求,为我提供美国和加拿大的所有 zip 文件,如下所示:

/usa/file1.zip
/usa/file2.zip
/canada/file1.zip
/canada/file2.zip

Amazon S3 doesn't support retrieving multiple ranges of data per GET request.

    -   https://docs.aws.amazon.com/AmazonS3/latest/dev/GettingObjectsUsingAPIs.html

您最好的选择是继续您正在做的事情 - 遍历您的对象并检索每个对象。这可以同时或异步完成——我建议从 S3 中并行获取每个对象。祝你好运!