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

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

使用 Amazon SDK for PHP 版本 3 的 Amazon S3 预签名 URL

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

以下示例演示如何:

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

凭证

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

创建预签名请求

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

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

导入

require 'vendor/autoload.php';

示例代码

$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 操作创建预签名 URL,方法是使用 getCommand 方法创建命令对象,然后使用该命令来调用 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 未进行确保存储桶或密钥存在的验证,此方法也不确保该对象允许未通过身份验证的访问。