Image tampering / upload error {{Image source cannot be read}}

I am trying to add upload of profile picture in Laravel 5.1 . I used the Intervention/Image package, but when I try to upload an image, I get this error:

NotReadableException on line AbstractDecoder.php 302: image source cannot be read

This is my PhotoController:

 <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Image; use Input; use App\Http\Requests; use App\Http\Controllers\Controller; class PhotoController extends Controller { /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() {} /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() {} /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { $img = Image::make($request->file('photo')); $img->save('image.png'); } /** * Display the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function show($id) {} /** * Show the form for editing the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function edit($id) {} /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param int $id * @return \Illuminate\Http\Response */ public function update(Request $request, $id) {} /** * Remove the specified resource from storage. * * @param int $id * @return \Illuminate\Http\Response */ public function destroy($id) {} } 

This is my html form:

 <header> <div class="student_profile_sub_header w100"> <div class="container ccenter"> <div class="student_profile_name"> <h4>{{$student->name}} {{$student->surname}}</h4> </div> <div class="student_profile_image"> <img src="{{asset('assets/profile_image.png')}}"> </div> <form method="POST" action="../student/profile/imageupload"> {!! csrf_field() !!} <input type="file" name="photo"> <input type="submit" value="Upload Image" name="submit"> @foreach($errors->all() as $error) <li>{{ $error }}</li> @endforeach </form> </div> </div> </header> 
+6
source share
2 answers

Add the following parameter to your form tag:

 enctype="multipart/form-data" 

And change for this in make:

 $img = Image::make($request->file('photo')->getRealPath()); 
+8
source

Try using the laravel collective, make sure you check the files for true if you are using the laravel collective

 {{ Form::open(['route'=>'your-route', 'class'=>'form',**'files'=>true**]) }} {{ Form::close()}}` 

then when you request your file in the save function, add getRealPath (), like this Image::make(Input::file('artist_pic')->getRealPath())->resize(120,75);

+1
source

All Articles