适用于 PHP 的 AWS 开发工具包
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

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

以下示例演示如何:

GitHub 上的此处提供了AWS SDK for PHP版本 3 的所有示例代码。

凭证

在运行示例代码之前,您需要配置 AWS 凭证,如适用于 PHP 的 AWS 开发工具包版本 3 的凭证中所述。然后导入AWS SDK for PHP,如适用于 PHP 的 AWS 开发工具包版本 3 的基本使用模式中所述。

创建预签名请求

您可以使用 Aws\S3\S3Client::createPresignedRequest() 方法获取 Amazon S3 对象的预签名 URL。此方法接受 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 操作创建预签名 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 未进行确保存储桶或密钥存在的验证,此方法也不确保该对象允许未通过身份验证的访问。