Laravel 6.x bladeのaタグでS3からファイルダウンロード

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

てっきりDownloadの処理はview側で書くのかと思いましたが、コントローラーに引数を渡してコントローラーで処理する方が一般的のようです。
しかし、S3のディレクトリ構造をどのようにして、ディレクトリ名・ファイル名のどこまでをDBに保存するか悩みます🤔🤔🤔