使用 Amazon S3 预签名 URLAmazonSDK for PHP - Amazon适用于 PHP 的开发工具包
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

使用 Amazon S3 预签名 URLAmazonSDK for PHP

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

以下示例演示如何:

的所有示例代码Amazon适用 SDK for PHP 版本 3GitHub 上的此处.

Credentials

运行示例代码之前,请配置Amazon凭证,如中所述的凭证AmazonSDK for PHP. 然后导入AmazonSDK for PHP,如中所述的基本使用模式AmazonSDK for PHP.

创建预签名请求

您可以 Amazon S3 用Aws\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 用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 未进行确保存储桶或密钥存在的验证,此方法也不确保该对象允许未通过身份验证的访问。