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
- 渡ってきた引数($id)を元に、DB保存してあったS3のファイル名(ファイルパス)を取得します。
- ファイルのmimeTypeを取得し、ContentTypeに指定します。
- 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);
}