(laravel) Content-Type: image/jpeg のリクエストを受け取って保存する


概要

LINE の Messaging API が画像ファイルを直接渡す形になっていたので、真似するために調べた。

普通は multipart/form-data の方が $request->validate() も使えて扱いやすい。

環境

  • PHP 7.4.22
  • Laravel 8.56.0
  • Laravel Sail 1.10.1

実装

Route::post('test', function (Request $request) {
    $content = $request->getContent(true);
    Storage::put('test.jpg', $content);
});

取得

getContent() の第一引数を true にすると resource として取得する。

$content = $request->getContent(true);

保存

resource はそのまま Storage::put() などに渡して保存できる。

Storage::put('test.jpg', $content);

動作確認

curl を使って確認する場合、-T, --upload-file <file> オプションにファイルパスを指定する。

curl -X POST http://localhost/test
    -H 'Content-Type: image/jpeg'
    -T ./image.jpg

storage/app/test.jpg が作成されているのを確認した。

参考資料