如何从Amazon S3对象获取键的数组

5

我正在使用Amazon S3 V3 PHP SDK,并尝试获取所有对象的密钥,为此我正在使用:

s3->listObjects([ 'Bucket' => $somebucketName]);

这个函数运行良好,并且我正在获取$somebucketName存储桶下的所有对象,并且其格式如下:

Aws\Result Object
(
    [data:Aws\Result:private] => Array
        (
            [IsTruncated] => 
            [Marker] => 
            [Contents] => Array
                (
                    [0] => Array
                        (
                            [Key] => 1.PNG
                            [LastModified] => Aws\Api\DateTimeResult Object
                                (
                                    [date] => 2015-07-14 07:22:25.000000
                                    [timezone_type] => 2
                                    [timezone] => Z
                                )

                            [ETag] => "23f423234v23v42424d23"
                            [Size] => 19980
                            [StorageClass] => STANDARD
                            [Owner] => Array
                                (
                                    [DisplayName] => sfsfssfsdf
                                    [ID] => 242f2342242342252g42f42vt34
                                )

                        )

                    [1] => Array
                        (
                            [Key] => 58.jpg
                            [LastModified] => Aws\Api\DateTimeResult Object
                                (
                                    [date] => 2015-07-14 07:20:26.000000
                                    [timezone_type] => 2
                                    [timezone] => Z
                                )

                            [ETag] => "vrtet4v4t54tvt4gvtgv45"
                            [Size] => 1226694
                            [StorageClass] => STANDARD
                            [Owner] => Array
                                (
                                    [DisplayName] => sfsfssfsdf
                                    [ID] => 34t3t3t3y43y4yg5yy4vg6u676
                                )

                        )

                    [2] => Array
                        (
                            [Key] => HDFHDFHDFHDFHFHFH
                            [LastModified] => Aws\Api\DateTimeResult Object
                                (
                                    [date] => 2015-07-30 12:07:42.000000
                                    [timezone_type] => 2
                                    [timezone] => Z
                                )

                            [ETag] => "3453345343rcf3f3r3r3f"

                )

            [Name] => SFSSD
            [Prefix] => 
            [MaxKeys] => 1000
            [@metadata] => Array
                (
                    [statusCode] => 200
                    [effectiveUri] => https://s3-us-west-2.amazonaws.com/SFSSD
                    [headers] => Array
                        (
                            [x-amz-id-2] =>  sdfsfs234sfs
                            [x-amz-request-id] => HSJFSD899
                            [date] => Mon, 03 Aug 2015 06:46:48 GMT
                            [x-amz-bucket-region] => us-west-2
                            [content-type] => application/xml
                            [transfer-encoding] => chunked
                            [server] => AmazonS3
                        )

                )

        )

)

现在我的问题是如何从上述对象中获取以下键的数组。
array("1.png","58.jpg","HDDHDFHDHDGH);

1
你试过使用循环吗? - Sougata Bose
如何在其中使用循环?如何访问 [data:Aws\Result:private]? - Richerd fuld
2个回答

5

Aws\Result 实现了 ArrayAccess 接口。你可以通过以下方式访问内容:

$result = $s3->listObjects(['Bucket' => $somebucketName])
$contents = $result['Contents'];

1

来自评论请注意,SDK的v1版本已经过时。如果您仍在使用它,可以使用以下代码片段:

$ObjectsListResponse = s3->list_objects([ 'Bucket' => $somebucketName]);
$Objects = $ObjectsListResponse->body->Contents;
foreach ($Objects as $Object) {
        $keyArray[] = $Object->Key;
}

PHP S3 示例


我得到了一个错误:注意:未定义属性:Aws\Result::$body - Richerd fuld
2
请注意,SDK的v1版本已经过时。 - giaour
如果它已被弃用,仍然是有价值的信息。根据现有答案,似乎有一些用户期望它能在v2或v3中工作。我认为编辑通过使其更具体来改善帖子,并且不违背作者的意图。虽然可以选择投反对票,但我认为这并不合适,因为它不符合“极其粗糙、没有付出努力的帖子,或者明显而且可能危险地不正确的答案”的标准。 - arcyqwerty

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接