本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用版本 3 的 Amazon S3 預簽名 AWS SDK for PHP 網址
您可以將必要資訊當做查詢字串參數來傳遞,以驗證特定類型的要求,而不使用授權 HTTP 標頭。這對於讓第三方瀏覽器直接存取私有 Amazon S3 資料非常有用,而不需要代理請求。此概念是為了建構「預先簽章」的請求,然後將其編碼為最終使用者瀏覽器可以擷取的 URL。此外,您可以透過指定過期時間,來限制預先簽章的要求。
下列範例示範如何:
-
使用建立預先簽署的 URL 以取得 S3 物件createPresignedRequest。
所有的範例程式碼都可以 AWS SDK for PHP 在這裡取
登入資料
在執行範例程式碼之前,請依照中的說明設定您的 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 未經過確保儲存貯體或金鑰存在的驗證,此方法也不確保該物件允許未經授權的存取。