我将每个用户的数据存储在一个名为其用户名的对象内部的存储桶中,例如我的存储桶是“my.bucket/bob1”、“my.bucket/bob2”等。我可以使用Amazon S3获取存储桶的大小:$s3->get_bucket_filesize($bucket,true);
但我需要计算“my.bucket/bob1”的大小。我尝试使用
$s3->get_object_filesize($bucket, "bob1");
但是这只返回该对象的大小,因为在我的客户端上,我将其视为文件夹,所以大小为0。
但是我需要以高效的方式获取用户文件夹级别的大小,以节省成本和时间。
编辑:
使用下面的代码,但这非常慢,我有数千个文件,从1KB到1GB+,这段代码需要太长时间。
function get_size($bucket,$path,$s3){
$size = 0;
$response = $s3->list_objects($bucket,array(
'prefix' => $path.'/'
));
foreach ($response->body as $object)
{
//print_r($object);
$object->Key.'('.$object->Size.')</br>';
$size = $size+$object->Size;
}
// $size = number_format($size / 1024 / 1024, 2);
return $size;
}