AWS S3 getObject 无法通过 PHP SDK 读取对象内容

Deb*_*ash 2 amazon-s3 amazon-web-services

我尝试通过以下代码从 s3 对象读取内容。

$content = $s3Client->getObject(
                        array(
                            'Bucket'=> $bucketName,
                            'Key' =>  $pathToObject,
                            'ResponseContentType' => 'text/plain',
                        )
                    );
Run Code Online (Sandbox Code Playgroud)

我得到了以下回应

GuzzleHttp\Psr7\Stream 对象 ( [stream:GuzzleHttp\Psr7\Stream:private] => 资源 id #87 [size:GuzzleHttp\Psr7\Stream:private] => [seekable:GuzzleHttp\Psr7\Stream:private] => 1 [可读:GuzzleHttp\Psr7\Stream:private] => 1 [可写:GuzzleHttp\Psr7\Stream:private] => 1 [uri:GuzzleHttp\Psr7\Stream:private] => php://temp [customMetadata: GuzzleHttp\Psr7\Stream:private] => 数组 ( )

)

任何帮助将不胜感激阅读 S3 中的对象内容。

Abb*_*bas 5

实际上它返回 Psr7\Stream 对象。

所以如果我们需要从 PSR Stream 中获取内容,我们必须从对象中调用 getContents() 方法。

<?php

$s3Client = new Aws\S3\S3Client(array(
    'stats'   => TRUE,
    'http'    => array(
        'verify' => FALSE,
        'connect_timeout' => 30
    ),
    'version'     => 'latest'
));     

$result = $s3Client->getObject(array(
    'Key'    => $filename,
    'Bucket' => $bucketName
));

echo $result['Body']->getContents();
//Also you can get metadata like this print_r($result['Body']->getMetadata());
Run Code Online (Sandbox Code Playgroud)

希望这对实际使用 SDK 版本 3 的人有所帮助。

这里的规范https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-GuzzleHttp.Psr7.Stream.html