仅使用 1 个请求 [C# AWSSDK] 检索 2 个 S3 对象及其内容
Retrieve 2 S3 objects and their content using only 1 request [C# AWSSDK]
我有以下文件 S3 存储桶:
“桶名”
- 文件夹1
- 美国
- file1.zip
- file2.zip
- 加拿大
- file1.zip
- file2.zip
有没有一种方法可以从“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 中并行获取每个对象。祝你好运!
我有以下文件 S3 存储桶:
“桶名”
- 文件夹1
- 美国
- file1.zip
- file2.zip
- 加拿大
- file1.zip
- file2.zip
- 美国
有没有一种方法可以从“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 中并行获取每个对象。祝你好运!