Reputation: 71
I'm trying to upload an image on a form register, but when I submit this form, I receive this error "The image must be an image.". I already changed the model to accept all image extensions and tried to add "enctype="multipart/form-data" " on my form, but it didn't work.
How can I solve this problem? I need this image upload.
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Foundation\Auth\User;
use Illuminate\Foundation\Livros;
class Livro extends Model
{
use HasFactory;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'livro',
'users_id',
'namel',
'autor',
'editora',
'categoria',
'classificação',
'descricao',
'image'=>'required|image|mimes:jpeg,jpg,png,bmp,gif,svg',
];
}
Controller
protected function validator(Request $request)
{
return Validator::make($request, [
'namel' => ['required', 'string', 'max:200'],
'autor' => ['required', 'string', 'email', 'max:200'],
'editora' => ['required', 'string', 'max:50'],
'categoria'=> ['required', 'string', 'min:50'],
'classificação'=> ['required', 'string', 'min:1','max:2'],
'descricao'=> ['required', 'string', 'min:200'],
'image'=> ['required'],
]);
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function create(StoreUpdateLivro $request)
{
$user = Auth::user()->id;
$data = $request->all();
if($request->file('image')->isValid()){
$image = $request->image->store('livros');
$data['image'] = $image;
}
Livro::create([
'users_id' => $user,
'namel' => $request['namel'],
'autor' => $request['autor'],
'editora' => $request['editora'],
'categoria'=> $request['categoria'],
'classificação'=>$request['classificação'] ,
'descricao'=>$request['descricao'],
'image'=>$request['image'],
]);
return view('livros/cadastro');
}
Blade
<form method="POST" enctype=”multipart/form-data” action="{{ url('/cadastro_livros') }}">
<div class="form-group row">
<label for="image" class="col-md-4 col-form-label text-md-right">{{ __('CAPA') }}</label>
<div class="col-md-6">
<input type="file" class="form-control @error('image') is-invalid @enderror" name="image" >
@error('image')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
<br>
</div>
</div>
</form>
Upvotes: 2
Views: 24659
Reputation: 117
This is how the problem got solved for me!
Make Sure you have added
enctype="multipart/form-data"
Input Type should be file
<input type="file" name="image">
then In the validation
'image' => 'file|mimes:jpg,jpeg,png,gif|max:1024',
Upvotes: 6
Reputation: 8082
Your enctype=”multipart/form-data”
is not correctly set, it is using strange "
(dobule quotes), see they are like ”
instead of "
, so maybe you do not have enctype
set, hence no file is being sent...
Upvotes: 18