Articles

Håndtering Filopplasting I Laravel – CodeSource.io

Nesten all søknad har å gjøre med filopplasting av noe slag: et profilbilde, et dokument FOR KYC-verifisering, et dokument som inneholder CV, etc.

derfor er det viktig å forstå hvordan man håndterer filopplasting I Laravel.

i denne opplæringen skal vi bygge et enkelt brukerprofilskjema, hvor brukeren må fylle ut sine detaljer, og disse detaljene vil inkludere å sende inn et profilbilde.

på slutten av denne opplæringen bør du kunne håndtere filopplastinger, håndtere filopplastingsvalidering og vite hva du skal gjøre når filen ikke lastes opp.

Sette Opp

For å komme I gang Må Laravel installeres på systemet ditt. Hvis Du Allerede har Laravel installert, kan du hoppe over dette trinnet.

jeg vil anbefale At Du installerer Laravel globalt. Spesielt hvis du planlegger å bruke det ofte. Du kan gjøre det ved å kjøre følgende kommando på en terminal.

composer global require laravel/installer

når det er ferdig, kan vi gå videre til å lage en Ny Laravel prosjekt for denne opplæringen.

laravel new profile-form

Kjører kommandoen ovenfor vil opprette en Ny Laravel prosjekt i gjeldende katalog kalt profil-form.

Betjene appen ved å kjøre følgende:

cd profile-formphp artisan serve

Naviger til der du finner appen din som viser Standard laravel-destinasjonssiden.

Skrive Databasemigrasjonen

Vi må opprette en brukertabell som lagrer brukerdetaljer.Laravel leveres med en migrering for brukertabellen som finnes på database\migrations14_10_12_000000_create_users_table.php. Endre filen slik at den ser slik ut:

Her har vi endret standard laravel-migreringen for brukertabellen for å inkludere et feltbilde som vil lagre NETTADRESSEN til brukerens fotografi.

Endre .env-fil for å inkludere de riktige databasedetaljene. Kjør deretter overføringene ved å kjøre følgende kommando:

php artisan migrate

Oppdater brukermodellen for å gjenspeile tillegget av fotofeltet. Legg til bilde i $fillable slik at det kan fylles ut automatisk av laravel når du oppretter og oppdaterer en bruker.

// App\User.phpprotected $fillable = ;

når det er gjort, kan vi fortsette å bygge frontend av profilskjemaet.

Bygge Frontend

Vi må opprette et autentiseringssystem som lar brukeren registrere seg og logge inn i programmet.

Opprett en ny fil i ressurser/visninger kalt register.blade.php. Legg til følgende i den nyopprettede filen.

vi bruker bootstrap for styling, derav behovet for å legge den til den øverste delen av siden. Vi har laget alle feltene som kreves her, slik at brukeren ikke kan sende inn skjemaet uten å fylle ut alle feltene.

feltet som er spesielt viktig for oss her, er filinndatafeltet <input type="file" Oppdater web.php for å inkludere ruten til registersiden

// web.php...Route::get('/register', function () { return view('register');});

Gå til vil vise registersiden som inneholder feltene som er typiske for et registreringsskjema.

filopplastingsskjema

vi må spesifisere hvilken type filer som støttes. Siden vi bare vil ha bildefiler, må vi spesifisere i inngangselementet at vi bare vil ha bildefiler.

Modfiy input:type="file" for å godta bare bildefiler ved å legge til godta attributtet med en verdi på image/* til inndatakoden.

fotografiseksjonen skal nå like:

mens skjemaet ser ut til å sende bilder til backend, kan det ikke gjøre det ennå. Vi må fortelle skjemaet at det må sende en annen type skjemadata til backend, i dette tilfellet binary data.

Vi gjør Dette ved å legge til enctype attributtet til skjemaelementet, og sette verdien til multipart/form-data.

åpningsskjemaet skal se ut:

<form action="#" class="col-md-5" enctype="multipart/form-data">

deretter må vi skrive kontrolleren for å håndtere opplastingen.

Skrive Kontrolleren

vår backend skal kunne håndtere validering, lagring og omdirigering / godkjenning av brukeren.

Laravel leveres med RegisterController som finnes på app\Http\Controllers\Auth\RegisterController.php.

Validering

validator metoden i Registerkontrolleren har ansvaret for å validere feltene. Så la oss oppdatere det for å gjenspeile hva vi egentlig ønsker.

Endre validator-metoden i RegisterController.php for å validere alle våre felt.

navn-feltet skal være et obligatorisk felt, og en streng, derav valideringsreglene. Det samme gjelder e-post og passord.

passordfeltet må bekreftes. I frontend la vi til et felt for password_confirmation. Dette er hva passordfeltet sammenlignes med. Endelig fotofeltet.

dette feltet er obligatorisk ved registrering. Det er nødvendig fordi i vår database migrasjon, vi gjorde det slik. Hvis vi hadde satt det til å være nullable, ville vi ikke måtte sette valideringen til nødvendig.

Laravel har også en praktisk valideringsregel, bilde, som brukes til å validere bildefiler (filer med en av følgende utvidelser: jpeg, png, bmp, gif eller svg).

en annen validering som du kanskje vil bli utført på filer, er

  • Som Sikrer at filstørrelsen ikke er større eller mindre enn et bestemt beløp. Denne regelen kan legges til som max:500 eller min:500 etter behov. Det skal bemerkes at filstørrelsen her er i kilobytes
  • Kontrollerer dimensjonene til bildet. Dette kan gjøres ved å legge til følgende i rekken av regler 'dimensions:min_width=100,min_height=200'.

Lagring

det neste trinnet er å lagre bildet. Vi vil opprette en ny funksjon for å håndtere denne funksjonaliteten.

det er flere steder hvor filer kan lagres i et program: de kan lagres i en s3-bøtte, google disk eller til og med i applikasjonsserveren din.

Laravel kommer med støtte for lagring av filer på disse stedene. For enkelhets skyld vil vi lagre bildefilen i søknaden.

Laravel Request class, Illuminate\Http\Request gir støtte for filhåndtering ut av esken. Den opplastede filen kan lagres via $request→file(<inputName>)→store(<folderToBeStored>). For vårt tilfelle kunne vi bruke:

$request->file('photo')->store('profile')

dette lagrer filen i mappen lagring \app\profile. Filen lagres med et tilfeldig navn, og url-adressen til filen returneres.

hvis vi vil tilordne et tilpasset navn til bildet som det blir lagret, må vi bruke metoden storeAs.

Ved hjelp av storeAs metoden vil se ut

$request→file(<inputName>)→storeAs(<folderToBeStored>, <customName.fileExtension>)

filtypen er viktig, og laravel gir enkle måter å få filtypen av filen som ble lastet opp, via clientExtension metoden .

Det kan hentes som vist nedenfor

$request->file('photo')->extension()

Ved hjelp av denne metoden kan vi lagre brukerens bilde basert på brukerens navn.

$fileName = $request->get('name') . '.' . $request->file('photo')->extension(); $request->file('photo')->storeAs('profile', $fileName);

I vårt tilfelle kan vi gjøre med de tilfeldige navnene som laravel lagrer filen vår.

  • for at filen skal kunne åpnes offentlig, må den lagres i mappen storage/app/public.
  • Filer i andre mapper vil ikke være offentlig tilgjengelige

la oss lage en funksjon som håndterer oppgaven med å lagre bilder til lagringen.

legg til følgende

funksjonen storeImage lagrer bildet i mappen storage/app/public/profile og returnerer EN NETTADRESSE til lagringsplassen for filen.

Setter alt sammen

Siden vi legger til flere ting som skal gjøres, må vi overstyre standardregistermetoden som laravel har gitt oss.

Laravel gir en egenskap for registrering av brukere og kan bli funnet på Illuminate\Foundation\Auth\RegistersUsers.php.

Oppdater Registerkontrolleren for å inkludere følgende:

som vist ovenfor, gjør opprett-funksjonen arbeidet med å opprette en bruker basert på dataene som sendes til den.

registerfunksjonen er der alt skjer. Valideringen utføres først før noe annet.

hvis valideringen er bestått, lagrer vi bildet. Etter det er gjort, oppretter vi brukeren ved å sende alle dataene som trengs i en matrise, $data.

hvis alt skjer vellykket, autentiserer vi brukeren og omdirigerer til hjemmesiden.

Viser Det Opplastede Bildet

hjemmesiden er der vi vil vise alle brukerdetaljer. Først, la oss lage en rute og kontroller for den.

kjør koden for Å generere HomeController på terminalen.

php artisan make:controller HomeController

Gå til den nyopprettede HomeController, og legg til følgende metoder i klassen.

i konstruktøren definerer vi at vi bruker auth mellomvare. Hva denne mellomvaren gjør er at den bare tillater autoriserte brukere å få tilgang til funksjoner definert i klassen.

derfor kan brukeren bare komme hit hvis han er godkjent. Hvis brukeren ikke er godkjent, blir han omdirigert til påloggingssiden.

vis-funksjonen håndterer visning av hjemmesiden. Vi sender den autentiserte brukeren til visningen også. For å lære mer om dette, sjekk laravel-dokumentasjonen.

Oppdater rutefilen slik at den inneholder hjemruten.

// web.php...Route::get('/home', '[email protected]')->name('home');

endelig lage et hjem.blad.php-fil i katalogen resources/views.

Legg til følgende i hjem.blad.php:

i visningsfilen har vi tilgang til user – dataene som ble sendt fra kontrolleren.

vi bruker for øyeblikket et plassholderbilde for å vise brukerens bilde fordi bildet ikke er tilgjengelig for oss.

Vi må lage en symbolsk lenke fra public/storage til storage/app/public mappe Til Laravel gjør dette enkelt ved å gi artisan kommandoen:

php artisan storage:link

etter å ha gjort det, oppdatere bildet tag for å vise profilbildet.

<img src="https://codesource.io/handling-file-uploads-in-laravel/amp/{{asset('storage/'.$user->photo)}}" class="card-img-top" alt="...">

Gratulerer!!! Du har lykkes lært å lagre bilder i laravel.

Konklusjon

Nesten Alle applikasjoner krever lagring av filer på en eller annen måte. Etter veiledningen ovenfor, bør du kunne lagre bilder og annen fil til lokal lagring.All koden som brukes her finner du her på Github.