Amazon s3から署名付きURLを取得するための優れたソリューションを探しています。
私はそれで動作するバージョンを持っていますが、laravelを使用していません:
private function getUrl ()
{
$distribution = $_SERVER["AWS_CDN_URL"];
$cf = Amazon::getCFClient();
$url = $cf->getSignedUrl(array(
'url' => $distribution . self::AWS_PATH.rawurlencode($this->fileName),
'expires' => time() + (session_cache_expire() * 60)));
return $url;
}
ファイルシステム全体が機能することを考えると、これがlaravelを使用する最良の方法であるかどうかはわかりません...
しかし、別の方法がない場合、どうすればクライアントを入手できますか?デバッグFilesystemオブジェクト内にそのインスタンスが見つかりましたが、保護されています...
ララヴェルでは、
$s3 = \Storage::disk('s3');
$client = $s3->getDriver()->getAdapter()->getClient();
$expiry = "+10 minutes";
$command = $client->getCommand('GetObject', [
'Bucket' => \Config::get('filesystems.disks.s3.bucket'),
'Key' => "file/in/s3/bucket"
]);
$request = $client->createPresignedRequest($command, $expiry);
return (string) $request->getUri();
AWS for flysystem composerパッケージもあることを確認してください(バージョンは異なる場合があります):
"league/flysystem-aws-s3-v3": "1.0.9"
Laravel 5.5以降では、一時URL/s3署名済みURLを使用できるようになりました。
use \Storage;
// Make sure you have s3 as your disk driver
$url = Storage::disk('s3')->temporaryUrl(
'file1.jpg', Carbon::now()->addMinutes(5)
);
これは、s3ストレージドライバーAFAIKでのみ機能します。