Laravelでファイルダウンロード

投稿者: | 2019/02/22

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'));
}

コメントを残す

メールアドレスが公開されることはありません。