Laraveli mitme pildi üleslaadimine ja suuruse muutmine
Peale selle ajaveebi juhin ma YouTube’i kanalit, kus jagan videoõpetusi. Hiljuti küsis üks YouTube’i kanali tellijatest Laravelis mitme pildi suuruse muutmise kohta. Nad tahavad mitme pildi suurust muuta ühe korraga. Selles artiklis uurime, kuidas Laravelis mitu pilti üles laadida ja suurust muuta.
Sekkumispilt on avatud lähtekoodiga teek, mis võimaldab meil piltidega manipuleerida. Kasutan seda teeki piltide suuruse muutmiseks.
Alustamine
Meie eesmärgi saavutamiseks peate installima ja konfigureerima Intervention Image teegi Laraveli projekti. Avage terminal oma projekti juurkataloogis ja käivitage käsk:
composer require intervention/image
Kui teek on installitud, avage config/app.php
fail ja lisage sellele fassaadiga teenusepakkujad. Lisage selle paketi teenusepakkujad $providers
massiivi.
InterventionImageImageServiceProvider::class,
Lisage $aliases
massiivile fassaad .
'Image' => InterventionImageFacadesImage::class,
Järgmiseks vajame kataloogi, kuhu salvestame oma üleslaaditud failid. Laraveli failisüsteem pakub failide salvestamiseks avaliku ketta. Avalik ketas sisaldab faile, millele on üldsusele juurdepääs. Üleslaaditud failid leiate storage/app/public
kaustast. Et neid faile veebis, siis on vaja luua sümboolne link public/storage
, et storage/app/public
.
Looge sümboolne link käsuga:
php artisan storage:link
Selle käsu abil luuakse avalikku kataloogi salvestuskaust. Siia salvestame oma failid.
Laraveli piltide üleslaadimine ja suuruse muutmine
Serverisse failide üleslaadimiseks vajate vormi. Loome vormi, kus saate serverisse üles laadida mitu faili. Allpool on vormi näidiskood, mis läheb teie vaatefaili.
<form action="{{ url('ROUTE HERE') }}" method="post" enctype="multipart/form-data">
<div class="form-group">
<label for="exampleInputFile">File input</label>
<input type="file" name="profile_image[]" id="exampleInputFile" multiple />
</div>
{{ csrf_field() }}
<button type="submit" class="btn btn-default">Submit</button>
</form>
Vormis olen võtnud faili sisendnime nimega ‘profile_image []’, mis saadab serverisse hulga faile. Lisasin ka atribuudi „mitu”, mis võimaldab meil valida mitu faili. Asendage kohatäide ROUTE_URL tegeliku väärtusega.
Kuna peame pilte üles laadima ja nende suurust muutma, lisage kontrolleris kaks fassaadi järgmiselt.
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use Image; //Intervention Image
use IlluminateSupportFacadesStorage; //Laravel Filesystem
class ImageController extends Controller
{
}
Fassaadi lisamisega saate helistada sekkumispildi teegi suuruse muutmise funktsioonidele. Allolevas koodis laadin failid üles kahte kohta. Üks on originaalpilt. Teine asub pisipiltide kataloogi all. Esmalt laadime algse pildi pisipiltide kausta üles ja seejärel suurust muudame.
public function store(Request $request)
{
if ($request->hasFile('profile_image')) {
foreach($request->file('profile_image') as $file){
//get filename with extension
$filenamewithextension = $file->getClientOriginalName();
//get filename without extension
$filename = pathinfo($filenamewithextension, PATHINFO_FILENAME);
//get file extension
$extension = $file->getClientOriginalExtension();
//filename to store
$filenametostore = $filename.'_'.uniqid().'.'.$extension;
Storage::put('public/profile_images/'. $filenametostore, fopen($file, 'r+'));
Storage::put('public/profile_images/thumbnail/'. $filenametostore, fopen($file, 'r+'));
//Resize image here
$thumbnailpath = public_path('storage/profile_images/thumbnail/'.$filenametostore);
$img = Image::make($thumbnailpath)->resize(400, 150, function($constraint) {
$constraint->aspectRatio();
});
$img->save($thumbnailpath);
}
return redirect('ROUTE_URL')->with('success', "Image uploaded successfully.");
}
}
Siin muudame pildi suurust proportsionaalselt. Nii toimides säilitame kuvasuhte ja pilti ei lõigata. Ma läbin laiust 400 ja kõrgust 150. Neid väärtusi saate oma nõuete järgi muuta.
Jätkake ja proovige seda. Saad üleslaaditud piltide suuruse muutmise versiooni kataloogi ‘storage / profile_images / thumbnail’.
Kui otsite kõva saaki, asendage read allpool
$img = Image::make($thumbnailpath)->resize(400, 150, function($constraint) {
$constraint->aspectRatio();
});
$img->save($thumbnailpath);
Koos
$img = Image::make($thumbnailpath)->resize(100, 100)->save($thumbnailpath);
Loodan, et saate aru, kuidas Laravelis mitu pilti üles laadida ja suurust muuta. Palun jagage oma mõtteid ja ettepanekuid allpool olevas kommentaaride jaotises.