Как проверить размер подпапки для папки внутри корзины Amazon S3 - PullRequest
1 голос
/ 27 марта 2012

Что я хочу сделать, так это то, что я хочу проверить Размер для подпапки внутри определенной папки для корзины в Amazon S3 bucket, используя vb.

Возможно ли это сделать, если таковая имеетсяссылка и помощь будут оценены.

Ответы [ 3 ]

3 голосов
/ 06 марта 2013

Немного опоздал на вечеринку, но это работает как шарм:

        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>

Надеюсь, это поможет.

2 голосов
/ 27 марта 2012

Статья Начиная с 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....
    }
}    
0 голосов
/ 27 марта 2012

Единственный способ - перечислить все файлы на S3, которые вы просматриваете (например, с префиксом / some / folder /), и сложить все возвращающиеся размеры.S3 не знает эту информацию.

В VB вы должны использовать какой-то API, когда вы просите S3 перечислить содержимое сегмента с префиксом, результаты возвращаются около 1000 одновременно, с информацией о размере для каждого файла.Таким образом, для суммирования ГБ, используемого для 25 000 файлов, требуется всего около 25 вызовов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...