単純に画像ファイルをブラウザにレスポンスする方法を紹介します。
ソースコード
たとえば、storage/app/uploads/sample.jpgをレスポンスしたいときは、次のようになります。
use Illuminate\Support\Facades\Storage;
return response()->file(Storage::path("uploads/sample.jpg"));
ブラウザでアクセスすると、画像が表示されます。
解説
Storage::path()
により、storageディレクトリまでのフルパスを取得しています。
>>> Storage::path();
C:\\Users\user\Documents\projects\laravel\storage\
引数にstorage以下の相対ファイルパスを指定すると、ファイルのフルパスを取得することができます。
>>> Storage::path("app");
C:\\Users\user\Documents\projects\laravel\storage\app\
>>> Storage::path("app/sample.png");
C:\\Users\user\Documents\projects\laravel\storage\app\sample.png
ファイルをレスポンスするには、response()->file
を使用します。
return response()->file(<ファイルのフルパス>));
ファイルが存在しないとき404を返すには?
abort_unlessを使用します。
abort_unless(Storage::exists($filepath), 404);
ファイルが存在しない場合は404 Not Foundが返され、処理が中止されます。なお、$filepathにはstorage以下の相対パスを指定します。
もしフルパスでファイルを指定したい場合は、代わりにFile::exists()
を使用してください。
use Illuminate\Support\Facades\File;
abort_unless(File::exists($filepath), 404);
コメント