LaravelのHttpクライアントでリクエスト結果のPDFを保存する

LaravelのHttpクライアントでリクエスト結果のPDFを保存する

LaravelにはGuzzleをラッパーしたHttpクライアントが標準で備えられています。
ただし、公式のドキュメントは詳しく記載されておらず、基本的な使い方しか載っていません。

リクエストした結果、ファイルをダウンロードする場合の方法と、
Storageを使ったAWS S3へ保存する方法を記載します。

サンプルコード

use Illuminate\Support\Facades\Http;

public function createPdf()
{
    // 重複しない保存先を取得 /tmp
    $tempName = tempnam(sys_get_temp_dir(), 'pdf_');

    $response = Http::sink($tempName)
        ->post('http://some-endpoint');

    // AWS s3に保存
    Storage::disk('s3')->putFile('drive/files', new File($tempName));

    return $response;
}

ポイント

Guzzleはリクエストする前に保存先のパス・Streamを指定しておくことでファイルが保存されます。
生粋のGuzzleはパラメータで指定しますが、Laravelのラッパーが入っているのでsinkメソッドで指定した後でリクエストを実行します。

プログラミングカテゴリの最新記事