多少の設定はあるものの基本的にはフロントエンドとバックエンドをちょこっと実装してやれば動かせた。
フロントエンド
formタグのenctype要素を”multipart/form-data”にする。
inputタグのtype要素をfileとすることでファイルを選択できる。
<form method="post" enctype="multipart/form-data" action="{{url('/upload')}}"> <input type="file" id="file" name="file" class="form-control"> <button type="submit" class="btn btn-primary m-1">アップロード</button> {{ csrf_field() }} </form>
バックエンド
ルート
特別なことはない
Route::post("/upload", "UploadController@upload");
コントローラー
$request->file(‘file’)でUploadedFileクラスを取得できるのでそのメソッドからファイルに関して情報を得られる。
UploadedFile
storage/app/tmpフォルダにデータを保存するときは以下のような感じ。
tmpフォルダがなくても勝手に作ってくれるようだ。
$filename = $request->file('file')->getClientOriginalName(); $request->file('file')->storeAs('tmp', $filename);
AWSのS3に保存するときは第3引数をS3とするが、あらかじめ.envに設定が必要となる。
他クラウドを使うときはconfig/filesystems.phpを編集する。
$request->file('file')->storeAs('tmp', $filename, 's3');
.envの設定
AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_DEFAULT_REGION AWS_BUCKET AWS_URL
関連するサイト
アップロードファイルの保存(Laravel5.7日本語サイト)