AWS SDK for PHP 版本 3 的亚马逊 S3 预签名网址 - AWS SDK for PHP

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

AWS SDK for PHP 版本 3 的亚马逊 S3 预签名网址

您可以通过传递请求信息作为查询字符串参数,而不是使用授权 HTTP 标头来验证特定类型的请求。这在允许第三方浏览器直接访问您的私有 Amazon S3 数据,而无需代理请求时非常有用。其概念是构建一个“预签名”的请求并将其编码为最终用户浏览器可检索的 URL。此外,您还可以通过指定过期时间来限制预签名请求。

以下示例演示如何:

的所有示例代码都可以在此 AWS SDK for PHP 处找到 GitHub

凭证

在运行示例代码之前,请配置您的 AWS 证书,如中所述凭证。然后导入 AWS SDK for PHP,如中所述基本用法

创建预签名请求

您可以使用 Aws\S3\S3Client::createPresignedRequest() 方法来获取 Amazon S3 对象的预签名 URL。此方法接受 Aws\CommandInterface 对象和过期时间戳并返回预签名 Psr\Http\Message\RequestInterface 对象。您可以使用请求的 getUri() 方法检索对象的预签名 URL。

最常见的情况是创建预签名 URL 来获取对象。

导入

use Aws\Exception\AwsException; use AwsUtilities\PrintableLineBreak; use AwsUtilities\TestableReadline; use DateTime; require 'vendor/autoload.php';

示例代码

$command = $s3Service->getClient()->getCommand('GetObject', [ 'Bucket' => $bucket, 'Key' => $key, ]);

创建预签名 URL

您可以为任何 Amazon S3 操作创建预签名 URL,方法是使用 getCommand 方法创建命令对象,然后使用该命令来调用 createPresignedRequest() 方法。最终发送请求时,请务必与返回的请求使用相同的方法和相同的标头。

示例代码

try { $preSignedUrl = $s3Service->preSignedUrl($command, $expiration); echo "Your preSignedUrl is \n$preSignedUrl\nand will be good for the next 20 minutes.\n"; echo $linebreak; echo "Thanks for trying the Amazon S3 presigned URL demo.\n"; } catch (AwsException $exception) { echo $linebreak; echo "Something went wrong: $exception"; die(); }

获取对象的 URL

如果您只需要在 Amazon S3 存储桶中存储的对象的公有 URL,则可使用 Aws\S3\S3Client::getObjectUrl() 方法。此方法将返回给定存储桶和密钥的未签名 URL。

示例代码

$preSignedUrl = $s3Service->preSignedUrl($command, $expiration);
重要

此方法返回的 URL 未进行确保存储桶或密钥存在的验证,此方法也不确保该对象允许未通过身份验证的访问。