Articles

Zpracování nahrávání souborů v Laravel – CodeSource.io

téměř všechny aplikace mají co do činění s nahráním souboru nějakého druhu: profilový obrázek, dokument pro ověření KYC, dokument obsahující životopis atd.

proto je důležité pochopit, jak zacházet s nahráváním souborů v Laravelu.

v tomto tutoriálu vytvoříme jednoduchý formulář profilu uživatele, kde uživatel bude muset vyplnit své údaje a tyto údaje budou zahrnovat odeslání profilového obrázku.

na konci tohoto tutoriálu byste měli být schopni zpracovat nahrávání souborů, zpracovat ověření nahrávání souborů a vědět, co dělat, když se soubor úspěšně nenahraje.

nastavení

Chcete-li začít, Laravel musí být nainstalován ve vašem systému. Pokud již máte nainstalovaný Laravel, můžete tento krok přeskočit.

doporučil bych, abyste nainstalovali Laravel globálně. Zvláště pokud jej plánujete používat často. Můžete tak učinit spuštěním následujícího příkazu na terminálu.

composer global require laravel/installer

po dokončení můžeme pokračovat v vytváření nového projektu Laravel pro tento tutoriál.

laravel new profile-form

spuštěním výše uvedeného příkazu vytvoříte nový projekt Laravel v aktuálním adresáři s názvem profile-form.

slouží aplikaci spuštěním následujícího:

cd profile-formphp artisan serve

přejděte na , kde najdete aplikaci zobrazující výchozí vstupní stránku Laravel.

psaní migrace databáze

budeme muset vytvořit tabulku uživatelů, která bude ukládat podrobnosti o uživateli.Laravel je dodáván s migrací pro tabulku uživatelů, která se nachází na database\migrations14_10_12_000000_create_users_table.php. Upravte tento soubor tak, aby vypadal takto:

zde jsme upravili výchozí migraci laravel pro tabulku uživatelů tak, aby obsahovala fotografii pole, která uloží adresu URL na fotografii uživatelů.

upravit .env soubor, který obsahuje správné údaje o databázi. Poté spusťte migrace spuštěním následujícího příkazu:

php artisan migrate

Aktualizujte uživatelský model tak, aby odrážel přidání fotografického pole. Přidejte fotografii do $fillable, takže ji může laravel automaticky vyplňovat při vytváření a aktualizaci uživatele.

// App\User.phpprotected $fillable = ;

po dokončení můžeme přistoupit k vytvoření frontendu formuláře profilu.

vytvoření frontendu

budeme muset vytvořit autentizační systém, který uživateli umožní registraci a přihlášení do aplikace.

vytvořte nový soubor ve zdrojích / pohledech s názvem register.blade.php. Do nově vytvořeného souboru přidejte následující.

používáme bootstrap pro styling, proto je třeba jej přidat do horní části stránky. Udělali jsme zde všechna požadovaná pole, takže uživatel nebude moci formulář odeslat bez vyplnění všech polí.

pole, které je pro nás obzvláště důležité, je pole pro zadávání souborů <input type="file" aktualizovat web.php zahrnout cestu na stránku registru

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

přechod na zobrazí stránku registru obsahující pole, která jsou typická pro registrační formulář.

formulář pro nahrání souboru

musíme určit typ podporovaných souborů. Protože chceme pouze obrazové soubory, musíme ve vstupním prvku určit, že chceme pouze obrazové soubory.

Modfiy input:type="file" přijímat pouze obrazové soubory přidáním atributu accept s hodnotou image/* do vstupní značky.

sekce Fotografie by se nyní měla líbit:

zatímco formulář vypadá nastavený pro odesílání obrázků do backendu, zatím to nemůže udělat. Musíme formuláři sdělit, že bude muset do backendu odeslat jiný typ dat formuláře, v tomto případě binární data.

to provedeme přidáním atributu enctype do prvku formuláře a nastavením jeho hodnoty na multipart/form-data.

značka úvodního formuláře by měla vypadat:

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

dále musíme napsat řadič, abychom zvládli nahrávání.

psaní řadiče

náš backend by měl být schopen zpracovat ověření, ukládání a přesměrování/autentizaci uživatele.

Laravel je dodáván s RegisterController, který lze nalézt na app\Http\Controllers\Auth\RegisterController.php.

validace

metoda validator v řadiči registru je pověřena odpovědností za validaci polí. Aktualizujme to tak, aby odráželo to, co vlastně chceme.

upravte metodu validátoru v RegisterController.php pro ověření všech našich polí.

pole Název by mělo být povinné pole a řetězec, tedy pravidla ověření. Podobné platí pro e-mail a heslo.

pole pro heslo musí být potvrzeno. Do frontendu jsme přidali pole pro password_confirmation. To je to, s čím je pole pro heslo porovnáno. Nakonec fotografické pole.

toto pole je vyžadováno při registraci. Je to nutné, protože v naší migraci databáze jsme to udělali. Pokud bychom ji nastavili na nulovací,pak bychom nemuseli nastavovat validaci na požadovanou.

Laravel má také praktické Validační pravidlo, obrázek, který se používá k ověření obrazových souborů (soubory s některou z následujících přípon: jpeg, png, bmp, gif nebo svg).

některé další ověření, které byste mohli chtít provést na souborech, jsou

  • a zajišťují, že Velikost souboru není větší nebo menší než určitá částka. Toto pravidlo lze přidat jako max:500 nebo min:500 podle potřeby. Je třeba poznamenat, že Velikost souboru je zde v kilobajtech
  • kontrola rozměrů obrázku. To lze provést přidáním následujících pravidel do pole pravidel 'dimensions:min_width=100,min_height=200'.

uložení

dalším krokem je uložení obrázku. Vytvoříme novou funkci, která tuto funkci zvládne.

existuje několik míst, kde mohou být soubory uloženy v aplikaci: mohou být uloženy v kbelíku s3, na Disku google nebo dokonce na aplikačním serveru.

Laravel přichází s podporou pro ukládání souborů na těchto místech. Pro jednoduchost budeme ukládat obrazový soubor do aplikace.

Třída požadavků Laravel, Illuminate\Http\Request poskytuje podporu pro zpracování souborů po vybalení z krabice. Nahraný soubor lze uložit přes $request→file(<inputName>)→store(<folderToBeStored>). Pro náš případ, mohli bychom použít:

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

tím se soubor uloží do složky úložiště \app\profile. Soubor je uložen s náhodným názvem A adresa url souboru je vrácena.

pokud chceme obrázku přiřadit vlastní název při jeho ukládání, musíme použít metodu storeAs.

pomocí metody storeAs bude vypadat jako

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

přípona souboru je důležitá a laravel poskytuje jednoduché způsoby, jak získat příponu souboru, který byl nahrán, pomocí metody clientExtension.

lze jej získat, jak je uvedeno níže

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

pomocí této metody můžeme uložit obrázek uživatele na základě jména uživatele.

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

v našem případě si můžeme vystačit s náhodnými jmény, která laravel ukládá náš soubor.

  • aby byl váš soubor veřejně přístupný, musí být uložen ve složce storage/app/public.
  • soubory v jiných složkách nebudou veřejně dostupné

pojďme vytvořit funkci, která zpracovává úkol ukládání obrázků do úložiště.

pod funkci validátoru přidejte následující

funkce storeImage uloží obrázek do složky storage/app/public/profile a vrátí adresu URL do úložiště souboru.

dát to všechno dohromady

protože přidáváme více věcí, které je třeba udělat, musíme přepsat výchozí metodu registru, kterou nám poskytuje laravel.

Laravel poskytuje vlastnost pro registraci uživatelů a lze ji nalézt na Illuminate\Foundation\Auth\RegistersUsers.php.

Aktualizujte řadič registru tak, aby zahrnoval následující:

jak je vidět výše, funkce vytvořit provádí práci při vytváření uživatele na základě dat, která jsou mu odeslána.

funkce registru je místo, kde se všechno děje. Ověření se nejprve provádí před jakoukoli jinou věcí.

pokud je validace předána, uložíme obrázek. Poté vytvoříme uživatele předáním všech potřebných dat v poli $data.

pokud se vše stane úspěšně, ověříme uživatele a přesměrujeme na domovskou stránku.

zobrazení nahraného obrázku

na domovské stránce se zobrazí všechny údaje o uživateli. Nejprve vytvoříme trasu a ovladač.

na terminálu spusťte kód a vygenerujte HomeController.

php artisan make:controller HomeController

přejděte na nově vytvořené HomeController a do třídy přidejte následující metody.

v konstruktoru definujeme, že používáme auth middleware. To, co tento middleware dělá, je, že umožňuje přístup k funkcím definovaným ve třídě pouze oprávněným uživatelům.

uživatel tedy může přijít pouze tehdy, pokud je ověřen. Pokud je uživatel neautentizován, je přesměrován na přihlašovací stránku.

funkce show zpracovává zobrazení domovské stránky. Ověřeného uživatele předáváme také do zobrazení. Chcete-li se o tom dozvědět více, zkontrolujte dokumentaci laravel.

Aktualizujte soubor tras tak, aby obsahoval domovskou trasu.

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

konečně vytvořit domov.čepel.php soubor v adresáři resources/views.

přidejte následující do home.čepel.php:

v souboru view máme přístup k datům user, která byla předána z řadiče.

v současné době používáme zástupný obrázek k zobrazení fotografie uživatele, protože Fotografie není aktuálně k dispozici.

musíme vytvořit symbolický odkaz z public/storage do storage/app/public složky do Laravel to usnadňuje poskytnutím příkazu artisan:

php artisan storage:link

poté aktualizujte značku obrázku a zobrazte obrázek profilu.

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

Gratulujeme!!! Úspěšně jste se naučili ukládat obrázky do Laravelu.

závěr

téměř všechny aplikace vyžadují ukládání souborů tak či onak. Podle výše uvedeného průvodce byste měli mít možnost ukládat obrázky a jakýkoli jiný soubor do místního úložiště.Veškerý zde použitý kód najdete zde na Githubu.