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;
}
}
}