Laravelでファイルのアップロードができない時の対処法
2分目次
画像アップロード手順
詳しい説明などはここでは割愛し、使用したコードのみ記述する。詳しい説明はこちらなど参考になる。
php artisan storage:link
実行- 該当ControllerのCreateメソッドに
$request->icon->storeAs('/storage/icons', date("YmdHis").'_'.Auth::user()->id.'.jpg')
追記 - 該当Viewのformに
<input type="file" class="form-control" name="icon">
追記
上の手順をもってStorageに画像をアップロードするフォームを作成したところエラーが出た。
エラー文
Laravel
Call to a member function store() on null
エラー内容としては画像のフォームの値がnullといったところだろうか。
解決方法
formにenctype
属性がなかったのがエラー原因だった。僕のケースではenctype="multipart/form-data"
をformタグに追記すると上手く実行された。
Laravel
<form action="/hoge/new" enctype="multipart/form-data" method="post">
@csrf
<input type="text" placeholder="タイトル" name="title">
<input type="file" name="icon">
<textarea name="body" placeholder="本文"></textarea>
<input type="submit" class="btn" value="投稿する">
</form>
ファイルの送信時にはenctype属性が必要。
データをマルチパートデータとして送信します。フォーム内にファイルの送信欄を配置する場合は、この形式を指定しておく必要があります。
フォームに入力されたデータは、送信ボタンを押すことでウェブサーバーへ送信されます。 その際の送信先URLはaction属性で、データの送信方法はmethod属性で、送信するデータの形式はenctype属性でそれぞれ指定します。
詳しい説明はこちらの記事が参考になった。他にも@csrf
を書いていないでエラーになるケースなどが想定される。