Laravelでファイルのアップロードができない時の対処法

2

目次

画像アップロード手順

詳しい説明などはここでは割愛し、使用したコードのみ記述する。詳しい説明はこちらなど参考になる

  1. php artisan storage:link実行
  2. 該当ControllerのCreateメソッドに$request->icon->storeAs('/storage/icons', date("YmdHis").'_'.Auth::user()->id.'.jpg')追記
  3. 該当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属性が必要。

データをマルチパートデータとして送信します。フォーム内にファイルの送信欄を配置する場合は、この形式を指定しておく必要があります。

https://www.tagindex.com/html_tag/form/form_enctype.html

フォームに入力されたデータは、送信ボタンを押すことでウェブサーバーへ送信されます。 その際の送信先URLはaction属性で、データの送信方法はmethod属性で、送信するデータの形式はenctype属性でそれぞれ指定します。

http://www.htmq.com/html5/form.shtml

詳しい説明はこちらの記事が参考になった。他にも@csrfを書いていないでエラーになるケースなどが想定される。

  • SNSでシェアしよう
  • Twitterでシェア
  • FaceBookでシェア
  • Lineでシェア
  • 記事タイトルとURLをコピー
トップへ戻るボタン

\ HOME /

トップへ戻る