
Hi Dev,
today in this article we will understand how to update image file without changing its URL. So, let’s follow few steps for update image file without changing its URL.
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; use Illuminate\Support\Facades\DB; class ImageController extends Controller { public function allpost() { $users = DB::table('images')->get(); return view('allpost', compact('users')); } public function addpost() { return view('addpost'); } protected function poststore(Request $request) { $request->validate([ 'title' => 'required', 'image' => 'required|image|mimes:jpeg,png,jpg,gif|max:2048', ]); $imageName = null; if ($request->hasFile('image')) { $image = $request->file('image'); $imageName = time() . '_' . $image->getClientOriginalName(); $image->move(public_path('images'), $imageName); } Image::create([ 'title' => $request->input('title'), 'image' => $imageName, ]); return redirect()->route('addpost')->with('success', 'Record inserted successfully'); } function editpost($id){ $dosen = Post::findOrFail($id); ($id); return view('editpost', compact('dosen')); } public function update(Request $request, $id) { $post = Image::findOrFail($id); $post->title = $request->title; // If new image uploaded if ($request->hasFile('image')) { // Use existing image name or create one if somehow empty $filename = $post->image ?? 'post_' . $post->id . '.' . $request->file('image')->getClientOriginalExtension(); // Overwrite the image file (same name) $request->file('image')->move(public_path('images'), $filename); // Make sure DB value stays same $post->image = $filename; } $post->save(); return redirect('/allpost')->with('success', 'Item updated successfully'); } }
Create Add Routes
routes/web.php
Route::get('/allpost', [App\Http\Controllers\ImageController::class, 'allpost'])->name('allpost'); Route::get('/addpost', [App\Http\Controllers\ImageController::class, 'addpost'])->name('addpost'); Route::post('/poststore',[App\Http\Controllers\ImageController::class, 'poststore'])->name('poststore'); Route::get('/editpost/{id}', [App\Http\Controllers\ImageController::class, 'editpost']); Route::post('/editpost/{id}', [App\Http\Controllers\ImageController::class, 'update']);
Create Blade File
resources/views/addpost.blade.php
<form class="needs-validation" method="POST" action="{{ route('poststore') }}" enctype="multipart/form-data" > @csrf <label for="title">Title Name</label> <input type="text" class="form-control" name="title" placeholder="Title" value="{{ old('title') }}" required> <input name="image" type="file" accept="image/*" /> <button type="submit" name="submit" class="btn btn-success">Save</button> </form>
resources/views/editpost.blade.php
<form class="needs-validation" method="post" action="{{ url('editpost') }}/{{ $dosen->id }}" enctype="multipart/form-data" > @csrf <label>Post Name</label> <input type="text" class="form-control" name="title" value="{{ old('title', $dosen->title) }}" placeholder="title" required> <label>Image</label> <input name="image" type="file" class="form-control" accept="image/*"> {{-- Show current image if exists --}} @if ($dosen->image) <div class="mt-2"> <img src="/images/{{ $dosen->image }}" alt="Current Image" height="100"> </div> @endif <button type="submit" name="submit" class="btn btn-success">Update</button> </form>
Run Laravel App:
php artisan serve
I hope it will assist you…