2012-03-27 6 views
1

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

Это можно сделать, если да, то любая ссылка и помощь будут назначены.

+0

S3 плоский - нет папок, просто файлов с очень длинными именами и разделителями, которые заставляют его иметь папки. Вы хотите узнать размер всех объектов, хранящихся вместе с общим префиксом? например/ram/files/*? – Mike

+0

ok Я не очень хорошо знаком с амазонок S3, и это так, тогда это поможет мне в этой проблеме. как будто Ram - это имя ведра, и файлы находятся внутри него, возможно ли это получить и ограничить максимальный размер файлов ... –

ответ

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.... 
    } 
}  
+0

Спасибо за ссылку, но я ее уже изучил. было много вещей, которые мы должны реализовать, другие вещи сделаны, но я поражен этим. мы можем извлечь ведро, но я не могу понять, как получить объекты изнутри и в пространстве. это будет большой помощью, если вы можете привести пример (если это возможно). спасибо –

+0

Большое спасибо за код, а также за инвестиции в ваше драгоценное время, я испытаю его и дам вам знать результаты, спасибо еще раз. –

+0

Здравствуйте, Майк s3Object.Size() - это то, что я получил в s3Object, и я использую набор инструментов AWS с номером ревизии: {4F4C7530-C16D-4C75-9492-93207F03E902}: спасибо и приветствую. –

0

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

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

+0

спасибо за ответ, как я уже сказал ранее, я новичок в Amazon S3, поэтому он будет замечательным если вы можете предоставить мне живую ссылку, где я могу увидеть приблизительный способ сделать это (вряд ли имеет значение для меня, если он будет в C# или VB - я могу работать с обоими). Еще раз спасибо _Tom_ и извините. –

+0

Любой пример нескольких вызовов в bucket –

2

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

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

ваш ключ доступа и Secret Access Key должен по соглашению быть сохранены в файл конфигурации приложения:

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

Надеюсь, что помогает.

Смежные вопросы