Laravelでのダウンロードの方法についてまとめました。
公開ファイルのダウンロード
Laravelを通す必要もありません。
download属性を付けてリンクを作ってあげればダウンロードできます。
<a class="btn btn-primary m-1" href="{{url('/images/sample.png')}}" download>ダウンロード</a>
非公開ファイルのダウンロード
storageにあるデータをダウンロードする場合のサンプルです。
Responseクラスのdownloadメソッドを呼びだすことでダウンロードできます。
storageにある場合Storageクラスを使うことでパスをシンプルに設定することができます。
public function download(Request $request){ // レスポンス版 $headers = ['Content-Type' => 'text/plain']; $filename = 'test.txt'; return response()->download(\Storage::path('public/sample.txt'), $filename, $headers); // ストレージの中なら直接ダウンロードできる // return Storage::download('public/sample.txt', $filename, $headers); }
データのダウンロード
Responseクラスのmakeメソッドを使います。
public function download(Request $request){ // レスポンス版 $filename = 'test.txt'; $headers = [ 'Content-Type' => 'text/plain', 'content-Disposition' => 'attachment; filename="'.$filename.'"', ]; // データ $data = ...; return response()->make($data, 200, $headers); }
(おまけ)ダウンロードしたファイルをすぐに表示
Responseクラスのfileメソッドを使うとブラウザで直接表示することができます。 public function download(Request $request){ return response()->file(\Storage::path('public/image.jpg')); }