如何检查Amazon S3存储桶中文件夹的子文件夹大小

时间:2012-03-27 11:39:42

标签: asp.net amazon-s3

我想要做的是,我想使用vb检查Amazon S3存储桶中特定文件夹内子文件夹的大小。

是否可以这样做,如果有的话,任何链接和帮助都会被评估。

3 个答案:

答案 0 :(得分:3)

派对有点晚了,但这就像一个魅力:

        AmazonS3 client = AWSClientFactory.CreateAmazonS3Client(RegionEndpoint.USEast1);

        ListObjectsRequest request = new ListObjectsRequest();
        request.WithBucketName(bucketName);
        request.WithPrefix(folderPath);
        long total = 0;
        do
        {
            ListObjectsResponse response = client.ListObjects(request);

            if (response != null && response.S3Objects != null)             
                total += response.S3Objects.Sum(s => s.Size);

            if (response.IsTruncated)
            {
                request.Marker = response.NextMarker;
            }
            else
            {
                request = null;
            }
        } while (request != null);

您的访问密钥和秘密访问密钥应按照惯例保存到您的应用程序配置中:

<configuration>
  <appSettings>
    <add key="AWSAccessKey" value="XXXXXXXXXXXXXXX"/>
    <add key="AWSSecretKey" value="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"/>
  </appSettings>
</configuration>

希望有所帮助。

答案 1 :(得分:2)

文章Beginning with Amazon S3对您来说是一个很好的起点。引用listObject方法的代码位正在执行所需的99%(获取具有特定前缀的所有文件)。您只需要添加位来询问每个位的文件大小并将它们添加起来。

如果您能够获得存储桶,那么您已经拥有了此片段所需的所有电线:

using (s3Client)
{

    long totalFileSize = 0;

    try
    {        
        ListObjectsRequest Lor = new ListObjectsRequest()
        {
            BucketName = "<Your Bucket Name>",
            Prefix = "<Your Folder Path>",
            ///assuming your delimiter is a /
            Delimiter = "/" 
        };  

        ListObjectsResponse response1 = s3Client.ListObjects(Lor);

        foreach (S3Object s3Object in response1.S3Objects)
        { 
            totalFileSize += s3Object.Size();
        }
    }

    catch (AmazonS3Exception ex)
    {
        ///do some error handling....
    }
}    

答案 2 :(得分:0)

唯一的方法是枚举您正在查看的S3上的所有文件(例如使用前缀/ some / folder /)并添加所有返回的大小。 S3不知道这些信息。

在VB中,您必须使用某些API,当您要求S3列出带有前缀的存储桶的内容时,结果一次返回大约1000个,其中包含每个文件的大小信息。因此,添加用于25,000个文件的GB应该只需要25个左右的调用。