Amazon S3 URL已使用第 3 AWS SDK for PHP 版預先簽署 - AWS SDK for PHP

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Amazon S3 URL已使用第 3 AWS SDK for PHP 版預先簽署

您可以傳遞必要的資訊作為查詢字串參數,而不是使用授權HTTP標頭來驗證特定類型的請求。這有助於啟用直接第三方瀏覽器存取您的私有 Amazon S3 資料,而無需代理請求。其構想是建構「預先簽署」請求,並將其編碼為URL最終使用者的瀏覽器可以擷取的 。此外,您可以透過指定過期時間,來限制預先簽章的要求。

下列範例示範如何:

的所有範例程式碼 AWS SDK for PHP 都可在 上取得 GitHub

登入資料

在執行範例程式碼之前,請設定您的 AWS 憑證,如 中所述登入資料。然後匯入 AWS SDK for PHP,如 中所述基本使用

建立預先簽署的請求

您可以使用 Aws\S3\S3Client::createPresignedRequest()方法取得預先簽署URL至 Amazon S3 物件的 。此方法接受 Aws\CommandInterface 物件和過期時間戳記,並傳回預先簽章的 Psr\Http\Message\RequestInterface 物件。您可以使用請求getUri()的方法擷取URL物件的預先簽署。

最常見的案例是建立物件預先簽署URLGET的 。

匯入

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

您可以使用建立命令物件getCommand的方法URLs,為任何 Amazon S3 操作建立預先簽章,然後使用 命令呼叫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移至物件

如果您只需要公有 URL Amazon S3 儲存貯體中存放的物件,您可以使用 Aws\S3\S3Client::getObjectUrl()方法。此方法會將未簽署的 傳回URL給指定的儲存貯體和金鑰。

範例程式碼

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

此方法URL傳回的 不會驗證,以確保儲存貯體或金鑰存在,也不會確保物件允許未經驗證的存取。