AWS S3 | How to get the count of files in a folder in AWS S3

|
| By Webner

There was a task in which we were required to get each folder name with count of files it contains from an AWS S3 bucket. If we used the general approach to start a counter and increment that in a foreach loop we were getting the exact count of files for each folder but process was taking too long to run. So to reduce the execution time we found another way explained below.

Iterator_count:

We have a folder structure in a bucket like:

//bucket
   folder1
     folder2
      abc.pdf
      cdf.pdf
      ert.pdf
      wcdf.pdf
      wert.pdf
         folder3
          abc.pdf
          cdf.pdf
          ert.pdf

We want to get each folder names in folder1 as well as a number of files it contains.

We want the result as follows:

folder2=====>>>5

folder3=====>>>3

The code for getting the file count in amazon bucket:

//connect to s3
$credentials = new Credentials(AWSACCESSKEY, AWSSECRETKEY);
$s3Client = S3Client::factory(array(   'credentials' => $credentials   ));
//get all the object in s3
$result = $s3Client->ListObjects(array
('Bucket' => 'mybucketname',
 'Delimiter' => "/",
 'Prefix'=>’folder1/'
)
);
foreach ($result['CommonPrefixes'] as $object)
{
// get count of files in a folder, this is the key method
$count=iterator_count($s3Client->getIterator
('ListObjects', array
(‘'Bucket'=> 'mybucketname',
 'Prefix'=> $object['Prefix'],
'Delimiter' => '/'
)
)
);
$msg=$object['Prefix'] .'============== '.$count;
echo  "
".$msg;
}

Leave a Reply

Your email address will not be published. Required fields are marked *