Laravel 8 Image Upload Tutorial

Laravel 8 image upload with validation tutorial. In this post, i will show how to image upload with validation in laravel 8.

In this post example, i will create image upload form in laravel. As well as validate image before upload to database and directory in laravel 8.

How to Image Upload in Laravel 8

Simple steps to image upload in laravel 8 app:

  • Step 1 – Install Laravel 8 Application
  • Step 2 – Configuring Database Details
  • Step 3 – Create Model & Migration File For Image Upload
  • Step 4 – Create Image Upload Routes
  • Step 5 – Creating Image Upload Controller
  • Step 6 – Create Blade File For Image Upload Form
  • Step 7 – Start Development Server
  • Step 8 – Run Laravel 8 Image Upload with Validation App On Browser

Step 1 – Install Laravel 8 Application

In step 1, open your terminal and navigate to your local web server directory using the following command:

//for windows user
cd xampp/htdocs

//for ubuntu user
cd var/www/html

Then install laravel 8 latest application using the following command:

composer create-project --prefer-dist laravel/laravel LaravelImageUpload

Step 2 – Configuring Database Details

In step 2, open your downloaded laravel 8 app into any text editor. Then find .env file and configure database detail like following:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=db name
DB_USERNAME=db user name
DB_PASSWORD=db password

Step 3 – Create Model & Migration File For Image Upload

In step 3, open command prompt and navigate to your project by using the following command:

cd / LaravelImageUpload

Then create model and migration file by using the following command:

php artisan make:model Image -m

The above command will create two files into your laravel 8 image upload tutorial app, which is located inside the following locations:

  • LaravelImageUpload/app/Models/Image.php
  • LaravelImageUpload/database/migrations/create_images_table.php

So, find create_images_table.php file inside LaravelImageUpload/database/migrations/ directory. Then open this file and add the following code into function up() on this file:

    public function up()
    {
        Schema::create('images', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('path');
            $table->timestamps();
        });
    }

Now, open again your terminal and type the following command on cmd to create tables into your selected database:

php artisan migrate

Step 4 – Create Image Upload Routes

In step 4, open your web.php file, which is located inside routes directory. Then add the following routes into web.php file:

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\ImageUploadController;


/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', function () {
    return view('welcome');
});

Route::get('image', [ImageUploadController::class, 'index']);
Route::post('upload', [ImageUploadController::class, 'upload']);

Step 5 – Creating Image Upload Controller

In step 5, create image upload controller by using the following command:

php artisan make:controller ImageUploadController

The above command will create ImageUploadController.php file, which is located inside LaravelImageUpload/app/Http/Controllers/ directory.

The following laravel validation rules will validate image file before upload/save into database:

        $validatedData = $request->validate([
         'image' => 'required|image|mimes:jpg,png,jpeg,gif,svg|max:2048',
        ]);

So open ImageUploadController.php file and add the following code into it:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Image;

class ImageUploadController extends Controller
{
     public function index()
    {
        return view('image-upload');
    }

    public function upload(Request $request)
    {
        
        $validatedData = $request->validate([
         'image' => 'required|image|mimes:jpg,png,jpeg,gif,svg|max:2048',

        ]);

        $name = $request->file('image')->getClientOriginalName();

        $path = $request->file('image')->store('public/uploads');


        $save = new Image;

        $save->name = $name;
        $save->path = $path;

        $save->save();

        return redirect('image')->with('status', 'Image Has been uploaded successfully with validation in laravel');

    }
}

The following single line of code will upload image inside storage/app/public/uploads directory:

        $path = $request->file('image')->store('public/uploads');

Step 6 – Create Blade File For Form

In step 6, create new blade view file that named image-upload.blade.php inside resources/views directory for image upload form.

The following code display error message in laravel image upload forms. So do not forget to add the following code along laravel forms fields:

          @error('name')
              <div class="alert alert-danger mt-1 mb-1">{{ $message }}</div>
          @enderror

Don’t worry i have already added the validation error message display code along with each form fields.

So, you can add the following php and html form code into image-upload.blade.php:

<!DOCTYPE html>
<html>
<head>
	<title>How to Image Upload in Laravel 8</title>
	<meta name="csrf-token" content="{{ csrf_token() }}">

	<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">

</head>
<body>

<div class="container mt-4">

  @if(session('status'))
    <div class="alert alert-success">
        {{ session('status') }}
    </div>
  @endif

  <div class="card">
    <div class="card-header text-center font-weight-bold">
      <h2>Laravel 8 Image Upload Tutorial</h2>
    </div>
    <div class="card-body">
      <form name="image-upload" id="image-upload" method="post" action="{{url('upload')}}" enctype="multipart/form-data">
       @csrf

        <div class="form-group">
          <label for="exampleInputEmail1">Please Select Image</label>
          <input type="file" id="image" name="image" class="@error('image') is-invalid @enderror form-control">
          @error('image')
              <div class="alert alert-danger mt-1 mb-1">{{ $message }}</div>
          @enderror
        </div>

        <button type="submit" class="btn btn-primary">Submit</button>
      </form>
    </div>
  </div>
  
</div>	
</body>
</html>

Step 7 – Start Development Server

Finally, open your command prompt again and run the following command to start development server for your laravel 8 image upload application:

php artisan serve

Step 8 – Run Laravel 8 Image Upload with Validation App On Browser

In step 8, open your browser and fire the following url into your browser:

http://127.0.0.1:8000/image

Note that, in this example, the image will be upload on the following path – storage/app/uploads.

Laravel 8 image upload with validation app will look like in the following image:

Leave a Comment