Laravel - Uploading Image via CRUD API Service
Mohamad's interest is in Programming (Mobile, Web, Database and Machine Learning). He is studying at the Center For Artificial Intelligence Technology (CAIT), Universiti Kebangsaan Malaysia (UKM).
[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;
}
}
}