アップロードフォームの作成
index.balde.php
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<form method="POST" action="/upload" enctype="multipart/form-data">
{{ csrf_field() }}
<input type="file" id="file" name="file" class="form-control">
<button type="submit">アップロード</button>
</form>
</body>
</html>
引用:Laravelでファイルをアップロードする方法を詳細解説
ポイント
ファイルアップロード時はenctype=”multipart/form-data”を必ず指定する
ルート情報
通常表示のために適当にアドレスを書く
Route::get('/','コントローラ名@index');
アップロードファイルの受け取り
function store(Request $request)
{
print_r($request->all());
}
引用:Laravelでファイルをアップロードする方法を詳細解説
また以下のように書けばファイルのみを見ることができる
print_r($request->file('file'));
fileメソッドの引数としてfile
が入っているのはフォームのinput要素のnameプロパティに設定している値。
ルート情報
このメソッドを書いたらpost送信されるときに呼ばれるようにルート情報を書く
Route::post('/','コントローラ名@store');
アップロードされたファイルの保存
public function store(Request $request){
$request->file('file')->store('');
}
引用:Laravelでファイルをアップロードする方法を詳細解説
名前をつけて保存
パスとファイル名、ディスク名を指定して好きな名前をつけられる
$request->file('file')->storeAs('','image.jgp');
引用:リクエストの取得
複数ファイルのアップロード
input要素を以下に修正
index.blade.php
<input type="file" id="file" name="file[]" class="form-control" multiple>
変更点は以下の2つ
- nameを
"file"
から"file[]"
に変更 -
multiple
を追加
受け取り
前と同じで$request->file('file')
で受け取れ、配列となっている。