【发布时间】:2019-10-20 09:11:58
【问题描述】:
我的任务是提供一个 api 端点来找出特定模块在我们的 Amazon s3 存储桶中使用了多少空间。我正在使用 C# SDK。
我通过改编此处文档中的代码来实现这一点:https://docs.aws.amazon.com/AmazonS3/latest/dev/ListingObjectKeysUsingNetSDK.html
private long GetUsedBytes(string module, string customer)
{
ListObjectsRequest listRequest = new ListObjectsRequest()
{
BucketName = BucketName,
Prefix = module + "/" + customer
};
ListObjectsResponse listResponse;
long totalSize = 0;
do
{
listResponse = s3Client.ListObjects(listRequest);
foreach (S3Object obj in listResponse.S3Objects)
{
totalSize += obj.Size;
}
listRequest.Marker = listResponse.NextMarker;
} while (listResponse.IsTruncated);
return totalSize;
}
我的问题是:有没有办法使用 sdk 做到这一点,而不需要将所有实际的 s3objects 从桶中拉下来?使用 CLI 执行此操作有几个很好的答案:
AWS S3: how do I see how much disk space is using https://serverfault.com/questions/84815/how-can-i-get-the-size-of-an-amazon-s3-bucket
但我还没有找到直接使用 SDK 的。我是否必须以某种方式模仿 sdk 才能做到这一点?我考虑的另一种方法是获取所有键并查询它们的元数据,但获取我找到的所有键的唯一方法是获取上面链接中的所有对象^。如果有一种方法可以获取具有特定前缀的对象的所有元数据,那将是理想的。
感谢您的宝贵时间!
~乔什
【问题讨论】:
标签: c# amazon-web-services amazon-s3 sdk