< Laravel API

Laravel REST API - Képek adatbázisban

Szerző: Sallai András

Copyright © Sallai András, 2023

Licenc: CC Attribution-Share Alike 4.0 International

Web: https://szit.hu

Bevezetés

Adatbázisban tárolhatjuk a képek útvonalát és a magukat a képeket is. Ebben a leírásban a képeket fogjuk adatbázisban tárolni és nem azok útvonalát.

A képek tárolása adatbázisban nagyon gyorsan fogyasztja az adatbázis tárhelyet. Ezért a használata nem ajánlott.

Adatbázis tábla

A migrációs fájlban az up() metódus tartalma:

public function up(): void { Schema::create('employees', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->string('city'); $table->double('salary'); $table->binary('image'); $table->timestamps(); }); }

Tárolás

public function store(Request $request) { $path = NULL; $imageData = NULL; if($request->hasFile('image')) { $path = $request->file('image'); $imageData = file_get_contents($path); $imageBase64 = base64_encode($imageData); } $employee = new Employee; $employee->name = $request->name; $employee->city = $request->city; $employee->salary = $request->salary; $employee->image = $imageBase64; $employee->save(); return response()->json([ 'name' => $employee->name, 'success' => 'ok' ]); }

Validálás

Példa:

$request->validate([ 'name' => 'required|string|max:255', 'image' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048', ]);

Képekről MIME adatok tárolása

Ha képekről MIME adatokat is tárolunk, akkor semmit nem kell konvertálni kliens oldalon.

$employee = new Employee; $employee->name = $request->name; $employee->city = $request->city; $employee->salary = $request->salary; $employee->image = 'data:image/png;base64,' . $imageBase64; $employee->save();

A böngészők megjelenítik az ilyen adatot:

<img src="data:image/png;base64,iVBORw0KG... (a további képadataik)">

Tárolás lekérdezett MIME típussal

public function store(Request $request) { $path = NULL; $mime = NULL; $imageData = NULL; if($request->hasFile('image')) { $path = $request->file('image'); $mime = $request->file('image')->getClientMimeType(); $imageData = file_get_contents($path); $imageBase64 = base64_encode($imageData); } $employee = new Employee; $employee->name = $request->name; $employee->city = $request->city; $employee->salary = $request->salary; $employee->image = 'data:'. $mime .';base64,' . $imageBase64; $employee->save(); return response()->json([ 'name' => $employee->name, 'success' => 'ok' ]); }