Unable to upload a image ; laravel 6.0

Viewed 299

I'm a new to Laravel and using Laravel6.0. While doing validation I'm getting a error.

The picture must be an image. The picture must be a file. The picture must be a file of type: jpeg, png, jpg, gif.

I'm searching a solution on google, but cannot find correct an answer.

I added dd(request) in my rules() ,but I got the same error.

This is my ContentController, ContentRequest and create.blade.php.


@extends('layouts.app')
@section('content')
<div class="card">
  <div class="card-body">
     <form action="{{route('content.store')}}" method="post" enctype="multipart/form-data" >
          @csrf
        <div class="form-group">
          <label for="exampleFormControlInput1">タイトル</label>
          <input type="text" class="form-control" id="exampleFormControlInput1" placeholder="旅のタイトル" name="title" value="{{old('title')}}" >
        </div>
        <div class="form-group">
          <label for="exampleFormControlSelect1">大陸名</label>
          <select class="form-control" id="exampleFormControlSelect1" name="continent"  value="{{old('continent')}}">
            <option>アジア</option>
            <option>北アメリカ</option>
            <option>中南米</option>
            <option>ヨーロッパ</option>
            <option>アフリカ</option>
            <option>オセアニア</option>
          </select>
        </div>
        <div class="form-group">
          <label for="exampleFormControlInput1">国名</label>
          <input type="text" class="form-control" id="exampleFormControlInput1" placeholder="日本" name="country" value="{{old('country')}}">       
        </div>
        <div class="form-group">
          <label for="exampleFormControlSelect1">滞在期間</label>
          <select class="form-control" id="exampleFormControlSelect1" name="span" placeholder="滞在期間を選択"  >
            <option>1</option>
            <option>2</option>
            <option>3</option>
            <option>4</option>
            <option>5</option>
            <option>6</option>
            <option>7</option>
            <option>8</option>
            <option>9</option>
            <option>10</option>
            <option>11</option>
           <option>12</option>
           <option>13</option>
           <option>14</option>
           <option>15</option>
           <option>16</option>
           <option>17</option>
          </select>
        </div>
        <div class="form-group">
          <label for="exampleFormControlSelect1">費用</label>
          <select class="form-control" id="exampleFormControlSelect1" name="costs" placeholder="金額を選択" value='{{old('costs')}}'>
            <option>10000</option>
            <option>30000</option>
            <option>50000</option>
            <option>70000</option>
            <option>100000</option>
            <option>150000</option>
            <option>200000</option>
            <option>250000</option>
            <option>300000</option>
          </select>
        </div>
        <div class="form-group">
          <label for="exampleFormControlFile1">写真</label>
          <input type="file" class="form-control-file" id="exampleFormControlFile1" name="picture" value="{{old('picture')}}">
          <div class="input-group-append">
              <button type="submit" class="btn btn-outline-secondary reset"><i class="fas fa-times fa-fw"></i>取消</button>
          </div>
        </div>
        <div class="form-group">
          <label for="exampleFormControlTextarea1">コンテンツ</label>
          <textarea class="form-control" id="exampleFormControlTextarea1" rows="5" name="content"  >{{old('content')}}</textarea>
        </div>
        <input type="hidden" name="user_id" value="{{Auth::id()}}">
        <button type="submit" class="btn btn-primary btn-lg btn-block">投稿</button>
      </form>
  </div>
</div>
@endsection

ContentRequest

public function rules()
    {
        return [
            'user_id'=>'required',
            'title' => 'required|string|max:255',
            'continent' => 'required|string',
            'picture'=>'required|image|max:1000',
            'country' => 'required|string',
            'costs'=>'required|numeric',
            'span'=>'required|numeric',
            'content'=>'required|string|max:250',
        ];

        
         
    }
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests\ContentRequest;
use App\Content;

class ContentController extends Controller

  public function store(ContentRequest $request)
    {
        if($request->validated()){
            $content =new Content;
            
            $filename = $request->file('image')->store('public/image');
            $content->picture = basename($filename);

            $content->user_id = $request->user_id;
            $content->content = $request->content;
            $content->title = $request->title;
            $content->span = $request->span;
            $content->continent = $request->continent;
            $content->country = $request-> country;
            $content->costs = $request->costs;
            
            $content->save();
        }
        
        return redirect('/');
        
    }
2 Answers

try this

 public function rules()
    {
        return [
            'user_id'=>'required',
            'title' => 'required|string|max:255',
            'continent' => 'required|string',
            'picture'=>'required|mimes:jpeg,png,jpg,gif|max:1000',
            'country' => 'required|string',
            'costs'=>'required|numeric',
            'span'=>'required|numeric',
            'content'=>'required|string|max:250',
        ];
    }

and in the store function

if($request->validated()){

            $content =new Content;
            
            $filename = $request->file('image')->store('public/image');
            $content->picture = basename($filename);

            $content->user_id = $request->user_id;
            $content->content = $request->content;
            $content->title = $request->title;
            $content->span = $request->span;
            $content->continent = $request->continent;
            $content->country = $request-> country;
            $content->costs = $request->costs;
            
            $content->save();
        }

You have to use like this

'picture' => 'required|image|mimes:jpeg,jpg,png|max:1000',
Related