使用版本 3 的 Amazon S3 預簽名 AWS SDK for PHP 網址 - AWS SDK for PHP

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

使用版本 3 的 Amazon S3 預簽名 AWS SDK for PHP 網址

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

下列範例示範如何:

所有的範例程式碼都可以 AWS SDK for PHP 在這裡取得 GitHub。

登入資料

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

建立預先簽署的要求

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

最常見的情況就是建立預先簽章的 URL 以取得物件。

匯入

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, ]);

建立預先簽署的網址

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

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

範例程式碼

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

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