Complete guide to uploading images in Laravel 11

Diego Cortés
Diego Cortés
January 21, 2025
Complete guide to uploading images in Laravel 11

If you are developing an application with Laravel 11 and need to implement image upload functionality, you have come to the right place. This guide will take you through the necessary steps to allow users to upload images efficiently and securely. Below, you will find a detailed process that will help you integrate this feature into your development.

Initial Installation and Configuration

To start, ensure you have an appropriate development environment with Laravel 11 installed. You can verify your Laravel installation by running the following command in your terminal:

laravel -V

If you have not installed Laravel 11 yet, you can do so using Composer. Simply run:

composer create-project --prefer-dist laravel/laravel project_name "11.*"

Creating the Migration for the Database

To manage the uploaded images, it is essential to have a table in your database to store the information. Use the following command to generate a migration:

php artisan make:migration create_images_table

Then, open the generated migration file in the database/migrations folder and define the necessary columns, such as name, path, and description:

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

Next, run the migration to create the table in the database:

php artisan migrate

Creating the Image Upload Form

Once your table is set up, the next step is to create a form that allows users to upload images. Create a new view file in resources/views called upload.blade.php and add the following code:

<form action="{{ route('images.store') }}" method="POST" enctype="multipart/form-data">
    @csrf
    <label for="name">Image Name:</label>
    <input type="text" name="name" id="name" required>

    <label for="image">Select an Image:</label>
    <input type="file" name="image" id="image" required>

    <button type="submit">Upload Image</button>
</form>

This form sends a POST request to the endpoint you set up to store the images.

Controller to Manage Image Uploads

Next, you will need to create a controller that handles the logic for storing images. Run the following command to generate a controller:

php artisan make:controller ImageController

Inside the controller, add a function to store the image:

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

public function store(Request $request)
{
    $request->validate([
        'name' => 'required|string|max:255',
        'image' => 'required|image|mimes:jpeg,png,jpg,gif|max:2048',
    ]);

    $imageName = time().'.'.$request->image->extension();  
    $request->image->move(public_path('images'), $imageName);

    $image = new Image();
    $image->name = $request->input('name');
    $image->path = 'images/'.$imageName;
    $image->save();

    return back()->with('success', 'Image uploaded successfully.');
}

This method validates the user input, moves the image to a public folder, and saves its information in the database.

Route Configuration

Finally, don't forget to define the necessary routes in the routes/web.php file to access the form and submit the images:

use App\Http\Controllers\ImageController;

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

Route::post('/images', [ImageController::class, 'store'])->name('images.store');

Conclusion

By following these steps, you will be able to implement an effective image upload functionality in your Laravel 11 application. Each step has been designed to facilitate understanding and implementation, from the initial setup to managing the uploads.

If you want to stay updated with more news and tutorials about web development and Laravel, I invite you to keep exploring my blog. See you next time!

Article information

Published: January 21, 2025
Category: Laravel Tutorials
Reading time: 5-8 minutes
Difficulty: Intermediate

Key tips

1

Take your time to understand each concept before moving on to the next one.

2

Practice the examples in your own development environment for better understanding.

3

Don't hesitate to review the additional resources mentioned in the article.

Diego Cortés
Diego Cortés
Full Stack Developer, SEO Specialist with Expertise in Laravel & Vue.js and 3D Generalist

Frequently Asked Questions

Categories

Page loaded in 27.96 ms