03_2_5 S3からファイルダウンロード - hpscript/laravel GitHub Wiki

index.blade.php

aタグでは、actionでコントローラへリンクします。その際に、S3のファイルを指定するための引数を渡します。

<a href="{{ action('HogesController@download', $data->id) }}">{{ substr($data->attachment_file }}</a>

route

ルーティングはgetメソッドで大丈夫です。

Route::get('/download/{id}', 'HogesController@download');

controller

  1. 渡ってきた引数($id)を元に、DB保存してあったS3のファイル名(ファイルパス)を取得します。
  2. ファイルのmimeTypeを取得し、ContentTypeに指定します。
  3. headerを指定してreturnで返します。
public function download($id){
        $data = Data::where('id', $id)->first();
        $file_path = '/hogehoge/prd/'.$data->attachment_file; 

        $mimeType = Storage::disk('s3')->mimeType($file_path);
        $file_name = $data->attachment_file;

        $headers = [
            'Content-Type' => $mimeType,
            'Content-Disposition' => 'attachment; filename="'. $file_name. '"'
        ];
        return \Response::make(Storage::disk('s3')->get($file_path), 200, $headers);
    }