使用预签名网址获取对象

时间:2018-12-20 11:44:52

标签: php amazon-s3

我正在尝试通过listObjects获取AWS S3中的对象,但是我需要使用预签名的url来实现。 以下代码为我提供了这些对象:

$objects = $s3Client->listObjects([
   'Bucket' => $bucket,
   'Prefix' => $prefix
]);

问题是我需要使用预签名的url。我得到以下URL:

$cmd = $s3Client->getCommand('ListObjects', [
    'Bucket' => $bucket,
    'Prefix' => $prefix
]);
$request = $s3Client->createPresignedRequest($cmd, '+20 minutes');
$url = (string)$request->getUri();

当我通过浏览器访问URL时,我检索了对象,但是我需要用PHP获取对象,而不是指向它们的链接。我该怎么办?

1 个答案:

答案 0 :(得分:-1)

$s3Client = Aws::createClient('s3');
$result = $s3Client->getObject(array(
   'Bucket' => $bucket,
   'Key'    => $path
));
$metadata = $result->get("@metadata");
$statusCode = $metadata["statusCode"];
if ($statusCode == 200) {
    header("Content-type: text/image");
    header("Content-Disposition: attachment; filename=".$path);
    header("Pragma: no-cache");
    header("Expires: 0");
    return $result['Body'];//echo $result['Body'];
}