Amazon S3 预签名 URLAmazon SDK for PHP版本 3 - Amazon SDK for PHP
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

Amazon S3 预签名 URLAmazon SDK for PHP版本 3

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

以下示例演示如何:

Amazon SDK for PHPGitHub 上提供了的所有示例代码。

凭证

运行示例代码之前,请配置Amazon凭证,如中所述设置 凭证. 然后导入Amazon SDK for PHP,如中所述基本用法.

创建预签名请求

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

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

导入

require 'vendor/autoload.php'; use Aws\S3\S3Client; use Aws\Exception\AwsException;

示例代码

$s3Client = new Aws\S3\S3Client([ 'profile' => 'default', 'region' => 'us-east-2', 'version' => '2006-03-01', ]); $cmd = $s3Client->getCommand('GetObject', [ 'Bucket' => 'my-bucket', 'Key' => 'testKey' ]); $request = $s3Client->createPresignedRequest($cmd, '+20 minutes');

创建预签名 URL

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

示例代码

//Creating a presigned URL $cmd = $s3Client->getCommand('GetObject', [ 'Bucket' => 'my-bucket', 'Key' => 'testKey' ]); $request = $s3Client->createPresignedRequest($cmd, '+20 minutes'); // Get the actual presigned-url $presignedUrl = (string)$request->getUri();

获取对象的 URL

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

示例代码

//Getting the URL to an object $url = $s3Client->getObjectUrl('my-bucket', 'my-key');
重要

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