web-dev-qa-db-ja.com

Filesystem Laravel 5.2を使用して、Amazon s3からファイルの署名付きURLを取得します

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オブジェクト内にそのインスタンスが見つかりましたが、保護されています...

29

ララヴェルでは、

$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"
40
brian_d

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でのみ機能します。

https://laravel.com/docs/5.5/filesystem#retrieving-files

25