Laravel 5.3 Upload Image with Validation example

Laravel 5.3 Upload Image with Validation example

Laravel 5.3 Upload Image with Validation example

In this tutorial, i am going to tell how to upload image with validation in Laravel 5.3 and as everyone knows Laravel is going very popular framework.

Laravel has made changes in their library, folder structure and enhance their version with Laravel 5.3

You can easily validate images in Laravel like file max size and lots of new validation option as image dimension for image upload.

  1. $this->validate($request, [
  2. 'avatar' => 'dimensions:min_width=200,min_height=300'
  3. ]);

You can pass following parameter in dimension :

  • max_width
  • max_height
  • width
  • height
  • ratio

Now just follow simple step to upload your image with your validation rules :

Step 1: Route

In this step we will define two routes in web.php within routes directory. First route is used to render form view where we will select image and then using second route we will post this form data to controller.

routes/web.php
  1. Route::get('image-upload-with-validation',['as'=>'getimage','uses'=>'ImageController@getImage']);
  2. Route::post('image-upload-with-validation',['as'=>'postimage','uses'=>'ImageController@postImage']);
Step 2: ImageController

In this step we will create ImageController.php.

  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Http\Request;
  4. use App\Http\Requests;
  5. class ImageController extends Controller
  6. {
  7. /**
  8. * Create view file
  9. *
  10. * @return void
  11. */
  12. public function getImage()
  13. {
  14.     return view('upload-image');
  15. }
  16. /**
  17. * Manage Post Request
  18. *
  19. * @return void
  20. */
  21. public function postImage(Request $request)
  22. {
  23.     $this->validate($request, [
  24. 'image_file' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:1024',
  25. ]);
  26. $imageName = time().'.'.$request->image_file->getClientOriginalExtension();
  27. $request->image_file->move(public_path('images'), $imageName);
  28.     return back()
  29.         ->with('success','You have successfully upload images.')
  30.         ->with('image',$imageName);
  31. }
  32. }

I move all images in images directory so make sure this directory should have write permission.

We are redirecting back with success message and image path after successfully uploaded. By using image path we can preview images to make sure what images i had uploaded.

If there is any error with file type then it redirect back with error message that means i have error message in errors variable that will appear where error will exist.

Step 3: Create upload-image.blade.php

In this step we will create view upload-image.blade.php file for uploading files or images.

resources/views/upload-image.blade.php
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.     <title>Laravel 5.3 Upload Image with Validation example</title>
  5.     <link rel="stylesheet" href="http://getbootstrap.com/dist/css/bootstrap.css">
  6. </head>
  7. <body>
  8. <div class="container">
  9. <div class="panel panel-primary">
  10. <div class="panel-heading"><h2>Laravel 5.3 Upload Image with Validation example</h2></div>
  11. <div class="panel-body">
  12.          @if (count($errors) > 0)
  13.             <div class="alert alert-danger">
  14.                 <strong>Whoops!</strong> There were some problems with your input.
  15.                 <ul>
  16.                     @foreach ($errors->all() as $error)
  17.                         <li>{{ $error }}</li>
  18.                     @endforeach
  19.                 </ul>
  20.             </div>
  21.         @endif
  22.         @if ($message = Session::get('success'))
  23.         <div class="alert alert-success alert-block">
  24.             <button type="button" class="close" data-dismiss="alert">×</button>
  25.          <strong>{{ $message }}</strong>
  26.         </div>
  27.         <img src="images/{{ Session::get('image') }}">
  28.         @endif
  29.     {!! Form::open(array('route' => 'postimage','files'=>true)) !!}
  30.             <div class="row">
  31.                 <div class="col-md-6">
  32.                     {!! Form::file('image_file', array('class' => 'form-control')) !!}
  33.                 </div>
  34.                 <div class="col-md-6">
  35.                     <button type="submit" class="btn btn-success">Upload</button>
  36.                 </div>
  37.             </div>
  38.     {!! Form::close() !!}
  39. </div>
  40. </div>
  41. </div>
  42. </body>
  43. </html>

The Form::open method has 'files' => true that means form data will be encoded as “multipart/form-data” so it is required whenever you are going to upload any files with form data.

If you are getting error of 'Class Form not found' then follow below link for solution :

Class form or html not found in Laravel 5

Phone: (+91) 8800417876
Noida, 201301