Laravel - Uploading Image via CRUD API Service

[1] Open the Laravel Project

Continue from the previous tutorial https://hashnotes.hashnode.dev/laravel-create-crud-api-service

[2] Install Image Manipulation Package

[2.1] Install Package

composer require "intervention/image=~2.0"

[2.2] Publish Package

php artisan vendor:publish --provider="Intervention\Image\ImageServiceProviderLaravelRecent"

[3] Update Config file

(file:config\app.php)

update the service providers

i.e. add Intervention\Image\ImageServiceProvider::class,

    /*
    |--------------------------------------------------------------------------
    | Autoloaded Service Providers
    |--------------------------------------------------------------------------
    |
    | The service providers listed here will be automatically loaded on the
    | request to your application. Feel free to add your own services to
    | this array to grant expanded functionality to your applications.
    |
    */

    'providers' => ServiceProvider::defaultProviders()->merge([
        /*
         * Package Service Providers...
         */

        /*
         * Application Service Providers...
         */
        App\Providers\AppServiceProvider::class,
        App\Providers\AuthServiceProvider::class,
        // App\Providers\BroadcastServiceProvider::class,
        App\Providers\EventServiceProvider::class,
        App\Providers\RouteServiceProvider::class,
        Intervention\Image\ImageServiceProvider::class, 
    ])->toArray(),

update alias

i.e. add 'Image' => Intervention\Image\Facades\Image::class,

    /*
    |--------------------------------------------------------------------------
    | Class Aliases
    |--------------------------------------------------------------------------
    |
    | This array of class aliases will be registered when this application
    | is started. However, feel free to register as many as you wish as
    | the aliases are "lazy" loaded so they don't hinder performance.
    |
    */

    'aliases' => Facade::defaultAliases()->merge([
        // 'Example' => App\Facades\Example::class,
        'Image' => Intervention\Image\Facades\Image::class,
    ])->toArray(),

[4] Update Controller

header

add the Intervention class

i.e. use Intervention\Image\Facades\Image;

<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use App\Models\Report;
use Intervention\Image\Facades\Image;

store function

    public function store(Request $request)
    {
        $report = new Report;     
        $report->repref = $request->repref;
        $report->repdate = $request->repdate;
        $report->reptime = $request->reptime;
        $report->replocn = $request->replocn;
        $report->replocndesc = $request->replocndesc;

        if($request->has('reppict1') &&  $this->isImageObject($request->reppict1) ){
            $report->reppict1 = Image::make($request->reppict1)->fit(1000)->encode ('data-url');            
            $report->reppict1thum = Image::make($request->reppict1)->fit(100)->encode ('data-url');

        };

        if($request->has('reppict2') && $this->isImageObject($request->reppict2) ){
            $report->reppict2 = Image::make($request->reppict2)->fit(1000)->encode ('data-url');            
            $report->reppict2thum = Image::make($request->reppict2)->fit(100)->encode ('data-url');
        };

        if($request->has('reppict3') && $this->isImageObject($request->reppict3) ){
            $report->reppict3 = Image::make($request->reppict3)->fit(1000)->encode ('data-url');            
            $report->reppict3thum = Image::make($request->reppict3)->fit(100)->encode ('data-url');
        };

        $report->repfire = $request->repfire;
        $report->reptrap = $request->reptrap;
        $report->repinju = $request->repinju;
        $report->user_id = $request->user_id;    
        $report->save();

        return response()->json([
            'stus' => 'stored',
        ],200); 
    }

update function

    public function update(Request $request, string $id)
    {

        $report = Report::find($id);

        $report_data = [
            'repref' => $request->repref,
            'repdate' => $request->repdate,
            'reptime' => $request->reptime,
            'replocn' => $request->replocn,
            'replocndesc' => $request->replocndesc,            
            'repfire' => $request->repfire,
            'reptrap' => $request->reptrap,
            'repinju' => $request->repinju,
            'user_id' => $request->user_id
        ];

        if($request->has('reppict1') &&  $this->isImageObject($request->reppict1) ){
            $report_data['reppict1'] = Image::make($request->reppict1)->fit(1000)->encode ('data-url');            
            $report_data['reppict1thum'] = Image::make($request->reppict1)->fit(100)->encode ('data-url');

        };

        if($request->has('reppict2') && $this->isImageObject($request->reppict2) ){
            $report_data['reppict2'] = Image::make($request->reppict2)->fit(1000)->encode ('data-url');            
            $report_data['reppict2thum'] = Image::make($request->reppict2)->fit(100)->encode ('data-url');
        };

        if($request->has('reppict3') && $this->isImageObject($request->reppict3) ){
            $report_data['reppict3'] = Image::make($request->reppict3)->fit(1000)->encode ('data-url');            
            $report_data['reppict3thum'] = Image::make($request->reppict3)->fit(100)->encode ('data-url');
        };

        $report->update($report_data);
        return response()->json([
            'stus' => 'updated',
        ],200);
    }

isImageObject($data)

    private function isImageObject($data)
    {
        if (is_string($data)){
            return false;
        }else{
            try {
                $mimeType = $data->getClientMimeType();
                return explode('/', $mimeType)[0]=='image';
            } catch (Exception $e) {
                return false;
            }
        }
    }