
hi Dev,
today in this article we will understand how to upload & Store Image in Laravel.
Follow a few straightforward steps to let users upload images via a Blade form and store them in Laravel’s filesystem. So let’s start :
Install Laravel 12
composer create-project laravel/laravel example-image
Create Model
php artisan create_images_table
database/migrations/create_images_table.php
<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\DB; return new class extends Migration { /** * Run the migrations. */ public function up(): void { Schema::create('images', function (Blueprint $table) { $table->id(); $table->string('title'); $table->string('image'); $table->timestamps(); }); DB::statement("ALTER TABLE images ADD file MEDIUMBLOB"); } /** * Reverse the migrations. */ public function down(): void { Schema::dropIfExists('images'); } };
app/Models/Image.php
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; class Image extends Model { protected $fillable = [ 'title', 'image', ]; }
Create Controller
php artisan make:controller ImageController
app/Http/Controllers/ImageController.php
<?php namespace App\Http\Controllers; use App\Models\Image; use Illuminate\Http\Request; class ImageController extends Controller { public function upload(Request $request) { $file = $request->file('file'); $imgPath = time().'_'.$file->getClientOriginalName(); $file->move(public_path('images/imglist'), $imgPath); $image = new Image(); $image->path = 'images/imglist/' . $imgPath; $image->save(); return redirect()->route('images.list') ->with('success', 'Image uploaded successfully'); } public function list() { $imageData = Image::all(); return view('display', compact('imageData')); } }
Create Add Routes
routes/web.php
use App\Http\Controllers\ImageController; Route::get('/images', [ImageController::class, 'list'])->name('images.list'); Route::post('/upload', [ImageController::class, 'upload'])->name('images.upload');
Create Blade File
resources/views/addpost.blade.php
<!DOCTYPE html> <html> <head><title>Upload Image</title></head> <body> @if(session('success')) <p style="color: green;">{{ session('success') }}</p> @endif <form action="{{ route('images.upload') }}" method="POST" enctype="multipart/form-data"> @csrf <input type="file" name="file" required> <button type="submit">Upload</button> </form> <a href="{{ route('images.list') }}">View Gallery</a> </body> </html>
resources/views/display.blade.php
<!DOCTYPE html> <html> <head><title>Image Gallery</title></head> <body> <h2>Uploaded Images</h2> <a href="{{ url('/upload') }}">Upload more</a> <div style="display: flex; flex-wrap: wrap; gap: 10px; margin-top: 15px;"> @foreach($imageData as $img) <div style="border: 1px solid #ccc; padding: 5px;"> <img src="{{ asset($img->path) }}" alt="Image" style="width:150px;height:auto;"> </div> @endforeach </div> </body> </html>
Run Laravel App:
php artisan serve