return response($recordingFile)->header('Content-type', 'video/mp4; charset=binary');
return new StreamedResponse(function () use ($s3FilePath) {
$stream = Storage::disk('s3')->readStream($s3FilePath);
fpassthru($stream);
fclose($stream);
}, 200, [
'Content-Type' => 'video/mp4',
'Content-Disposition' => 'inline; filename="' . basename($s3FilePath) . '"',
]);
このように変更しました
StreamedResponseとは
LaravelやSymfonyのフレームワークで使用されるHTTPレスポンスの一種。
大量のデータやリアルタイムなデータを効率よくクライアントに送信する目的で使用されます。
2つのコードの違い
通常のレスポンスでは、すべてのデータが一度に生成され、メモリに保持されてからクライアントに送信されますが、StreamedResponse はデータをチャンク(小さな部分)に分割してストリームとして送信します。
これにより、大量のデータを一度に処理せず、少しずつ送信できるため、メモリ効率が良くなるようです。
StreamedResponseを使わない理由がないように見えますが、何かデメリットはあるんでしょうかね。
特徴 | response() |
StreamedResponse |
---|---|---|
ファイルの取得方法 | メモリに全体を読み込む | ストリームで少しずつ読み込む |
メモリ使用量 | 高い(ファイルサイズに依存) | 低い(ストリーミング処理) |
大容量ファイル対応 | 不向き | 適している |
パフォーマンス | ファイルが大きいと遅くなる可能性 | メモリ効率が良く、パフォーマンスが安定する |