Share this:

Welcome to this Laravel 10 Image Upload Example Tutorial! If you’re working on a web application and need to implement image uploading, Laravel 10 provides a simple and efficient way to handle this task. In this tutorial, we’ll walk through the process of uploading and displaying images using Laravel 10’s robust features.


To follow this tutorial, you should have a basic understanding of Laravel and PHP. You’ll also need the following:

  • Laravel 10 installed on your system
  • A Laravel project set up
  • A working database connection

Step 1: Create a Migration and Model

First, let’s create a table to store our image data. Run the following command to create a migration file:

php artisan make:migration create_images_table

Edit the migration file located in the database/migrations folder and add the necessary columns:

public function up()
    Schema::create('images', function (Blueprint $table) {

Now, run the migration to create the table:

php artisan migrate

Next, create an Image model to interact with the table:

php artisan make:model Image

Step 2: Create Routes and Controllers

Create a new controller for handling image uploads:

php artisan make:controller ImageController

Add the following routes to your routes/web.php file:

use App\Http\Controllers\ImageController;

Route::get('/images', [ImageController::class, 'index']);
Route::post('/images/upload', [ImageController::class, 'store']);

Step 3: Implement the ImageController

Open the ImageController.php file and add the following code:

use App\Models\Image;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;

public function index()
    $images = Image::all();
    return view('images.index', compact('images'));

public function store(Request $request)
        'title' => 'required',
        'image' => 'required|image|max:2048',

    $imagePath = $request->file('image')->store('public/images');
    $image = new Image([
        'title' => $request->get('title'),
        'image_path' => $imagePath,

    return redirect('/images')->with('success', 'Image uploaded successfully');

Step 4: Create the Blade Views

Create a new folder named images inside the resources/views directory. Inside that folder, create a new file named index.blade.php and add the following code:


<div class="container">
    <h2>Image Upload</h2>
    <form action="{{ url('/images/upload') }}" method="POST" enctype="multipart/form-data">
        <div class="form-group">
            <label for="title">Title</label>
            <input type="text" name="title" id="title" class="form-control" required>
        <div class="form-group">
            <label for="image">Image</label>
            <input type="file" name="image" id="image" class="form-control" required>
        <button type="submit" class="btn btn-primary">Upload</button>

    <h2>Uploaded Images</h2>
    <div class="row">
        @foreach($images as $image)
            <div class="col-md-4">
                <div class="card mb-4">
                    <img src="{{ Storage::url($image->image_path) }}" alt="{{ $image->title }}" class="card-img-top">
                    <div class="card-body">
                        <h5 class="card-title">{{ $image->title }}</h5>

This view displays a form for uploading images and shows the uploaded images in a grid format.

Step 5: Update the App Layout

In the resources/views/layouts/app.blade.php file, add the following line inside the <head> section to enable the display of success messages:

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

This code will display a success message when an image is uploaded.

Step 6: Test the Image Upload Functionality

Now that everything is set up, start your Laravel development server by running:

php artisan serve

Visit http://localhost:8000/images in your web browser, and you should see the image upload form. You can now upload images and see them displayed on the page.


In this Laravel 10 Image Upload Example Tutorial, we’ve shown how to implement image uploading and display functionality using Laravel’s built-in features. You can easily customize this example to fit your specific requirements or integrate it into your existing Laravel application. The Laravel framework makes it simple to handle file uploads and process them efficiently, making it a great choice for web developers.

Share this:

Categorized in: