Laravel のファイルシステムはS3やRackspaceのようなオブジェクトストレージをサポートしています。S3にファイルを保管する際、誰でもアクセスできる状態ではあるべきではないファイルは多々あるでしょう。そういったファイルを利用者にDLさせる際にはPre-Signed(署名付き)URLが便利です。
1 |
$url = Storage::disk('s3')->temporaryUrl('path/to/file.doc', Carbon::now()->addMinute(); |
S3だけでなく、任意のカスタムファイルシステムにおいてもgetTemporaryUrl
メソッドを実装しておくことでtemporaryUrl
が利用可能(Laravel 5.4.32+)、Laravel 5.5からは同メソッドでRackspaceの一時URLも取得可能です。
なお、ファイルシステム(アダプター)がこのメソッドに対応していないのに呼び出した場合はRuntimeExceptionが、そもそも未実装のバージョン(5.4.30以前)で呼び出したらそんなメソッドはないと例外を投げられるでしょう。