我之前看过“如何找到整个S3存储桶大小”的问题。这是一个不同的问题 - 所以如果它含糊不清,我会事先道歉。我会尽力解释我想要实现的目标。
我目前正在使用Amazon S3 PHP Class。
这就是我想要实现的目标:
我希望能够遍历我的MySQL数据库,并在我的S3服务器上获取文件的特定文件名。 (这可能基于用户)。
在循环过程中,查询Amazon S3存储桶(以某种方式)并获取MySQL循环中每个文件的文件大小。
添加所有文件大小,以获得一个大致的字节大小。
所以,基本上,假设我的用户在S3存储桶上有5个文件。我怎样才能查询S3存储桶,查看该用户的5个文件存储在存储桶中的数据量?
如果难以理解,我道歉。如果需要,我可以重新表达清楚。
非常感谢任何正确方向的推动。
答案 0 :(得分:12)
你真的应该将文件大小存储在Mysql表中。更快获得信息,减少S3成本。
但是......试试这个吗?
$info = $s3->getObjectInfo($bucketName, $filename);
print $info['size'];
答案 1 :(得分:7)
既然AWS已经发布了支持PHP SDK,您可能需要考虑切换使用它:http://aws.amazon.com/sdkforphp/。
它还包括用于获取对象大小的api:get_object_filesize()。
我同意约翰文蒂米利亚。每次拨打S3都需要时间并且需要花钱。如果您可以在本地存储信息,它将提供更好的客户体验(更快)并且更便宜。
答案 2 :(得分:3)
除了chrisjmccreadie回答。
方法list_objects('')
是分页的,可能无法提供超过1000的结果,因为默认值为1000,因此您需要通过分页才能获得完整准确的结果。
但您可以使用get_object_list()
方法返回max-keys
结果。
包括( “sdk.class.php”);
$s3 = new AmazonS3();
$response = $s3->get_object_list('mojag');
foreach ($response->body as $object)
{
//print_r($object);
echo $object->Key.'('.$object->Size.')</br>';
$size = $size+$object->Size;
}
$size = number_format($size / 1024 / 1024, 2);
echo $size;
答案 3 :(得分:1)
我存储在我的MYSQL中,但有时您需要进行清理,并且知道MSYQL和S3之间的任何不匹配是很好的。当我需要获取文件大小时,我列出所有文件并计算文件大小
include("sdk.class.php");
$s3 = new AmazonS3();
$response = $s3->list_objects('mojag');
foreach ($response->body as $object)
{
//print_r($object);
echo $object->Key.'('.$object->Size.')</br>';
$size = $size+$object->Size;
}
$size = number_format($size / 1024 / 1024, 2);
echo $size;
答案 4 :(得分:1)
2015年,我必须使用http://docs.aws.amazon.com/aws-sdk-php/v2/guide/feature-s3-stream-wrapper.html
$client->registerStreamWrapper();
然后
$size = filesize('s3://' . $bucket . '/' . $key);
我希望这会对某人有所帮助。