Join WhatsApp ChannelJoin Now

Update image in laravel without changing its URL

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…

Recommended Posts