动态获取Amazon S3存储桶中的文件大小

时间:2010-12-15 17:30:34

标签: php mysql amazon-s3 amazon-web-services amazon

我之前看过“如何找到整个S3存储桶大小”的问题。这是一个不同的问题 - 所以如果它含糊不清,我会事先道歉。我会尽力解释我想要实现的目标。

我目前正在使用Amazon S3 PHP Class

这就是我想要实现的目标:

  1. 我希望能够遍历我的MySQL数据库,并在我的S3服务器上获取文件的特定文件名。 (这可能基于用户)。

  2. 在循环过程中,查询Amazon S3存储桶(以某种方式)并获取MySQL循环中每个文件的文件大小。

  3. 添加所有文件大小,以获得一个大致的字节大小。

  4. 所以,基本上,假设我的用户在S3存储桶上有5个文件。我怎样才能查询S3存储桶,查看该用户的5个文件存储在存储桶中的数据量?

    如果难以理解,我道歉。如果需要,我可以重新表达清楚。

    非常感谢任何正确方向的推动。

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

我希望这会对某人有所帮助。