プログラミング

Laravelで画像のアップロードでバリデーションエラーになる時の解決方法

こんにちは、シロウです。

Laravelで画像をアップロードをすると下記のバリデーションエラーが発生しました。

・The image must be an image.
・The image must be a file of type: jpeg,png, jpg, bmb

ちなみにエラーの日本語バージョンは下記。

・post imageにはファイルを指定してください。

・post imageにはjpeg, png, jpg, bmbのうちいずれかの形式のファイルを指定してください。

すぐに解決できたのですが、他の方も同じようにエラーが出ているかもしれないので、一応解決方法を載せておきます。

ちなみにバリデーションは下記のように設定していました。

$request->validate([
    'post_image'=>'file|mimes:jpeg,png,jpg,bmb|max:2048',
]);

Laravelで画像をアップロードするとバリデーションエラーになる原因

結論を言うと、enctype(読み方:エンクタイプ)属性を設定していないのが原因です。

enctype属性にはフォームで送るデータの形式を指定することができるのですが、画像をアップロードする時はこいつを設定してあげないといけないのです。

具体的には下記のように書きます。

{!! Form::open(['route' => 'posts.store','enctype'=>'multipart/form-data']) !!}

      <div class='form-group'>
          {!! Form::label('post_image','画像を添付する') !!}
          <img src="" id="preview_post_image">
          {!! Form::file('post_image') !!}
      </div>

{!! Form::submit('投稿する', ['class' => 'btn btn-primary btn-block']) !!}
{!! Form::close() !!}

ポイントは前述した通り「'enctype'=>'multipart/form-data'」です。

「画像をアップロードしたい時はenctype属性をformタグにつけないといけないんだなぁ〜」程度で覚えておけばOK。

とにかくこいつを設定してあげれば全ては丸く収まります。

 

ぜひ参考にしてください(*´ω`*)ノ