Tiedostojen tallennus
- Esittely
- Konfigurointi
- Lokaali ajuri
- Julkinen levy
- Ajurin ennakkoedellytykset
- Välimuistitallennus
- Kiekon instanssien hankkiminen
- Tiedostojen hakeminen
- Tiedostojen lataaminen
- Tiedostojen URL-osoitteet
- Tiedostojen metatiedot
.
- Tiedostojen tallentaminen
- Tiedostojen lataaminen
- Tiedostojen näkyvyys
- Tiedostojen poistaminen
- Kansiot
- Taaj. Tiedostojärjestelmät
Esittely
Laravel tarjoaa tehokkaan tiedostojärjestelmän abstraktion Frank de Jongen hienon Flysystem PHP-paketin ansiosta. Laravel Flysystem -integraatio tarjoaa yksinkertaiset ajurit paikallisten tiedostojärjestelmien, SFTP:n ja Amazon S3:n kanssa työskentelyyn. Mikä parasta, on hämmästyttävän helppoa vaihtaa näiden tallennusvaihtoehtojen välillä paikallisen kehityskoneesi ja tuotantopalvelimesi välillä, koska API pysyy samana kummassakin järjestelmässä.
Konfiguraatio
Laravelin tiedostojärjestelmän konfiguraatiotiedosto sijaitsee osoitteessa config/filesystems.php
. Tässä tiedostossa voit konfiguroida kaikki tiedostojärjestelmän ”levyt”. Jokainen levy edustaa tiettyä tallennusajuria ja tallennuspaikkaa. Esimerkkikonfiguraatiot kullekin tuetulle ajurille sisältyvät konfiguraatiotiedostoon, joten voit muokata konfiguraatiota vastaamaan tallennusmieltymyksiäsi ja tunnistetietojasi.
Ajuri local
on vuorovaikutuksessa Laravel-sovellusta pyörittävällä palvelimella paikallisesti tallennettujen tiedostojen kanssa, kun taas ajuria s3
käytetään kirjoittamiseen Amazonin S3-pilvitallennuspalveluun.
{tip} Voit määrittää niin monta levyä kuin haluat ja sinulla voi olla jopa useita levyjä, jotka käyttävät samaa ajuria.
Lokaali ajuri
Käytettäessä local
-ajuria kaikki tiedosto-operaatiot ovat suhteellisia filesystems
-konfigurointitiedostossa määritettyyn root
-hakemistoon. Oletuksena tämä arvo on asetettu storage/app
-hakemistoon. Näin ollen seuraava menetelmä kirjoittaisi storage/app/example.txt
:
use Illuminate\Support\Facades\Storage;Storage::disk('local')->put('example.txt', 'Contents');
Julkinen levy
Sovelluksesi filesystems
-konfiguraatiotiedostoon sisältyvä public
-levy on tarkoitettu tiedostoille, jotka ovat julkisesti saatavilla. Oletusarvoisesti public
-levy käyttää local
-ajuria ja tallentaa tiedostonsa osoitteeseen storage/app/public
.
Jotta nämä tiedostot olisivat saatavilla verkosta, sinun on luotava symbolinen linkki osoitteesta public/storage
osoitteeseen storage/app/public
. Tämän kansiokäytännön käyttäminen pitää julkisesti saatavilla olevat tiedostosi yhdessä hakemistossa, joka voidaan helposti jakaa eri käyttöönottojen kesken, kun käytetään Envoyerin kaltaisia nollakäyttöjärjestelmiä.
Symbolisen linkin luomiseen voit käyttää storage:link
Artisan-komentoa:
php artisan storage:link
Kun tiedosto on tallennettu ja symbolinen linkki on luotu, voit luoda URL-osoitteen tiedostoihin asset
-apurilla:
echo asset('storage/file.txt');
Voit määrittää lisää symbolisia linkkejä filesystems
-kokoonpanotiedostossa. Kukin määritetyistä linkeistä luodaan, kun suoritat komennon storage:link
:
'links' => ,
Ajurin edellytykset
Composer-paketit
Ennen kuin voit käyttää S3- tai SFTP-ajureita, sinun on asennettava sopiva paketti Composerin paketinhallinnan kautta:
- Amazon S3:
league/flysystem-aws-s3-v3 ~1.0
- SFTP:
league/flysystem-sftp ~1.0
Lisäksi voit halutessasi asentaa välimuistisovittimen suorituskyvyn lisäämiseksi:
- CachedAdapter:
league/flysystem-cached-adapter ~1.0
S3-ajurin konfigurointi
S3-ajurin konfigurointitiedot sijaitsevat config/filesystems.php
määritystiedostossa. Tämä tiedosto sisältää esimerkkikokoonpanomäärityksen S3-ajurille. Voit vapaasti muokata tätä arraya omilla S3-konfiguraatioillasi ja tunnistetiedoillasi. Yksinkertaisuuden vuoksi nämä ympäristömuuttujat vastaavat AWS CLI:n käyttämää nimeämiskäytäntöä.
FTP-ajurin konfiguraatio
Laravelin Flysystem-integraatiot toimivat erinomaisesti FTP:n kanssa; esimerkkikonfiguraatiota ei kuitenkaan ole sisällytetty kehyksen oletusarvoiseen filesystems.php
konfiguraatiotiedostoon. Jos sinun on määritettävä FTP-tiedostojärjestelmä, voit käyttää alla olevaa konfiguraatioesimerkkiä:
'ftp' => ,
SFTP-ajurin konfiguraatio
Laravelin Flysystem-integraatiot toimivat loistavasti SFTP:n kanssa; esimerkkikonfiguraatiota ei kuitenkaan ole sisällytetty kehyksen oletusarvoiseen filesystems.php
-konfiguraatiotiedostoon. Jos sinun täytyy konfiguroida SFTP-tiedostojärjestelmä, voit käyttää alla olevaa konfiguraatioesimerkkiä:
'sftp' => ,
Välimuistitallennus
Voidaksesi ottaa välimuistitallennuksen käyttöön tietylle levylle voit lisätä cache
-direktiivin levyn konfiguraatioasetuksiin. cache
-option tulisi olla joukko välimuistitietovaihtoehtoja, jotka sisältävät disk
-nimen, expire
-ajan sekunteina ja välimuistitiedoston prefix
:
's3' => ,],
Obtaining Disk Instances
Fasadin Storage
avulla voidaan olla vuorovaikutuksessa minkä tahansa konfiguroidun levyn kanssa. Voit esimerkiksi käyttää fasadin put
-metodia avatarin tallentamiseen oletuslevylle. Jos kutsut Storage
-fasadin metodeja kutsumatta ensin disk
-metodia, metodi välitetään automaattisesti oletuslevylle:
use Illuminate\Support\Facades\Storage;Storage::put('avatars/1', $content);
Jos sovelluksesi on vuorovaikutuksessa useiden levyjen kanssa, voit käyttää Storage
-fasadin disk
-metodia työskennelläksesi tietyllä levyllä olevien tiedostojen kanssa:
Storage::disk('s3')->put('avatars/1', $content);
Tiedostojen hakeminen
Metodia get
voidaan käyttää tiedoston sisällön hakemiseen. Metodi palauttaa tiedoston raa’an merkkijonosisällön. Muista, että kaikki tiedostopolut on määritettävä suhteessa levyn ”juuripaikkaan”:
$contents = Storage::get('file.jpg');
Metodilla exists
voidaan määrittää, onko tiedosto olemassa levyllä:
if (Storage::disk('s3')->exists('file.jpg')) { // ...}
Metodia missing
voidaan käyttää sen määrittämiseen, puuttuuko tiedosto levyltä:
if (Storage::disk('s3')->missing('file.jpg')) { // ...}
Tiedostojen lataaminen
Metodia download
voidaan käyttää sellaisen vastauksen tuottamiseen, joka pakottaa käyttäjän selaimen lataamaan tiedoston annetussa polussa. download
-metodi hyväksyy metodin toiseksi argumentiksi tiedostonimen, joka määrittää tiedostonimen, jonka tiedostoa lataava käyttäjä näkee. Lopuksi voit antaa metodin kolmantena argumenttina joukon HTTP-otsakkeita:
return Storage::download('file.jpg');return Storage::download('file.jpg', $name, $headers);
Tiedoston URL-osoitteet
Metodilla url
voit saada tietyn tiedoston URL-osoitteen. Jos käytät local
-ajuria, tämä tavallisesti vain liittää /storage
annetun polun eteen ja palauttaa suhteellisen URL-osoitteen tiedostoon. Jos käytät s3
-ajuria, palautetaan täydellinen etä-URL:
use Illuminate\Support\Facades\Storage;$url = Storage::url('file.jpg');
Käytettäessä local
-ajuria kaikki tiedostot, joiden pitäisi olla julkisesti saatavilla, tulisi sijoittaa storage/app/public
-hakemistoon. Lisäksi kannattaa luoda symbolinen linkki osoitteeseen public/storage
, joka osoittaa hakemistoon storage/app/public
.
{note} Kun käytetään
local
-ajuria,url
:n paluuarvo ei ole URL-koodattu. Tästä syystä suosittelemme, että tiedostot tallennetaan aina sellaisilla nimillä, jotka luovat kelvollisia URL-osoitteita.
Väliaikaiset URL-osoitteet
Menetelmällä temporaryUrl
voit luoda väliaikaisia URL-osoitteita tiedostoihin, jotka on tallennettu s3
-ajurilla. Tämä metodi hyväksyy polun ja DateTime
-instanssin, joka määrittää, milloin URL-osoitteen voimassaolon pitäisi päättyä:
use Illuminate\Support\Facades\Storage;$url = Storage::temporaryUrl( 'file.jpg', now()->addMinutes(5));
Jos sinun on määritettävä lisää S3-pyyntöparametreja, voit välittää pyyntöparametrien joukon kolmantena argumenttina temporaryUrl
-metodille:
$url = Storage::temporaryUrl( 'file.jpg', now()->addMinutes(5), );
URL:n isännän mukauttaminen
Jos haluat määritellä isännän valmiiksi Storage
-fasadin avulla luoduille URL-osoitteille, voit lisätä url
-vaihtoehdon levyn konfiguraatiomääritykseen:
'public' => ,
Tiedostojen metatiedot
Tiedostojen lukemisen ja kirjoittamisen lisäksi Laravel voi antaa tietoa myös itse tiedostoista. Esimerkiksi metodilla size
voidaan saada tiedoston koko tavuina:
use Illuminate\Support\Facades\Storage;$size = Storage::size('file.jpg');
Metodilla lastModified
saadaan UNIX-ajastinleima siitä, milloin tiedostoa viimeksi muutettiin:
$time = Storage::lastModified('file.jpg');
Tiedoston polut
Metodilla path
voidaan saada tietyn tiedoston polku. Jos käytät local
-ajuria, tämä palauttaa tiedoston absoluuttisen polun. Jos käytät s3
-ajuria, tämä metodi palauttaa suhteellisen polun tiedostoon S3-kauhassa:
use Illuminate\Support\Facades\Storage;$path = Storage::path('file.jpg');
Tiedostojen tallentaminen
Metodia put
voidaan käyttää tiedostojen sisällön tallentamiseen levylle. Voit myös välittää PHP resource
:n put
-metodille, joka käyttää Flysystemin taustalla olevaa stream-tukea. Muista, että kaikki tiedostopolut on määritettävä suhteessa levylle määritettyyn ”root”-sijaintiin:
use Illuminate\Support\Facades\Storage;Storage::put('file.jpg', $contents);Storage::put('file.jpg', $resource);
Automaattinen suoratoisto
Tiedostojen suoratoisto tallennusmuistiin vähentää huomattavasti muistin käyttöä. Jos haluat, että Laravel hoitaa automaattisesti tietyn tiedoston suoratoiston tallennuspaikkaan, voit käyttää putFile
– tai putFileAs
-metodia. Tämä metodi hyväksyy joko Illuminate\Http\File
– tai Illuminate\Http\UploadedFile
-instanssin ja suoratoistaa tiedoston automaattisesti haluamaasi tallennuspaikkaan:
use Illuminate\Http\File;use Illuminate\Support\Facades\Storage;// Automatically generate a unique ID for filename...$path = Storage::putFile('photos', new File('/path/to/photo'));// Manually specify a filename...$path = Storage::putFileAs('photos', new File('/path/to/photo'), 'photo.jpg');
Metodissa putFile
on muutama tärkeä asia huomioitava. Huomaa, että annoimme vain hakemiston nimen emmekä tiedostonimeä. Oletusarvoisesti putFile
-metodi luo yksilöllisen ID:n, joka toimii tiedostonimenä. Tiedoston laajennus määritetään tarkastelemalla tiedoston MIME-tyyppiä. Metodi putFile
palauttaa tiedoston polun, joten voit tallentaa polun, mukaan lukien generoidun tiedostonimen, tietokantaasi.
Metodit putFile
ja putFileAs
hyväksyvät myös argumentin, jolla määritetään tallennetun tiedoston ”näkyvyys”. Tämä on erityisen hyödyllistä, jos tallennat tiedoston pilvilevylle, kuten Amazon S3:lle, ja haluat, että tiedosto on julkisesti saatavilla generoitujen URL-osoitteiden kautta:
Storage::putFile('photos', new File('/path/to/photo'), 'public');
Prepending & Appending To Files
Metodeilla prepend
ja append
voit kirjoittaa tiedoston alkuun tai loppuun:
Storage::prepend('file.log', 'Prepended Text');Storage::append('file.log', 'Appended Text');
Kopiointi & Tiedostojen siirtäminen
Menetelmällä copy
voidaan kopioida olemassa oleva tiedosto uuteen paikkaan levyllä, kun taas menetelmällä move
voidaan nimetä olemassa oleva tiedosto uudelleen tai siirtää se uuteen paikkaan:
Storage::copy('old/file.jpg', 'new/file.jpg');Storage::move('old/file.jpg', 'new/file.jpg');
Tiedostojen lataaminen
Websovelluksissa yksi yleisimmistä tiedostojen tallentamisen käyttötapauksista on käyttäjän lataamien tiedostojen, kuten valokuvien ja asiakirjojen, tallentaminen. Laravel tekee ladattujen tiedostojen tallentamisesta erittäin helppoa käyttämällä store
-metodia ladatun tiedoston instanssille. Kutsu store
-metodia polulla, johon haluat tallentaa ladatun tiedoston:
<?phpnamespace App\Http\Controllers;use App\Http\Controllers\Controller;use Illuminate\Http\Request;class UserAvatarController extends Controller{ /** * Update the avatar for the user. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function update(Request $request) { $path = $request->file('avatar')->store('avatars'); return $path; }}
Tässä esimerkissä on muutama tärkeä asia huomioitava. Huomaa, että annoimme vain hakemiston nimen, emme tiedostonimeä. Oletusarvoisesti store
-menetelmä luo yksilöllisen tunnuksen, joka toimii tiedostonimenä. Tiedoston laajennus määritetään tarkastelemalla tiedoston MIME-tyyppiä. Metodi store
palauttaa tiedoston polun, joten voit tallentaa polun ja luodun tiedostonimen tietokantaasi.
Voit myös kutsua putFile
-metodia Storage
julkisivussa suorittaaksesi saman tiedoston tallennusoperaation kuin yllä olevassa esimerkissä:
$path = Storage::putFile('avatars', $request->file('avatar'));
Tiedoston nimen määrittäminen
Jos et halua, että tallennetulle tiedostollesi annetaan automaattisesti tiedostonimi, voit käyttää storeAs
-metodia, jonka argumentteina ovat polku, tiedostonimi ja (valinnainen) levy:
$path = $request->file('avatar')->storeAs( 'avatars', $request->user()->id);
Voit käyttää myös Storage
-fasadin putFileAs
-metodia, joka suorittaa saman tiedoston tallennusoperaation kuin yllä olevassa esimerkissä:
$path = Storage::putFileAs( 'avatars', $request->file('avatar'), $request->user()->id);
{note} Tulostamattomat ja virheelliset unicode-merkit poistetaan automaattisesti tiedostopoluista. Siksi kannattaa ehkä puhdistaa tiedostopolut ennen niiden välittämistä Laravelin tiedoston tallennusmetodeille. Tiedostopolut normalisoidaan käyttämällä
League\Flysystem\Util::normalizePath
-metodia.
Kiekon määrittäminen
Esimerkiksi tämän ladatun tiedoston store
-metodi käyttää oletuslevyäsi. Jos haluat määrittää toisen levyn, anna levyn nimi toisena argumenttina store
-menetelmälle:
$path = $request->file('avatar')->store( 'avatars/'.$request->user()->id, 's3');
Jos käytät storeAs
-menetelmää, voit antaa levyn nimen kolmantena argumenttina menetelmälle:
$path = $request->file('avatar')->storeAs( 'avatars', $request->user()->id, 's3');
Muut tiedot ladatusta tiedostosta
Jos haluat saada ladatun tiedoston alkuperäisen nimen, voit tehdä sen getClientOriginalName
-menetelmällä:
$name = $request->file('avatar')->getClientOriginalName();
Metodilla extension
voi saada ladatun tiedoston tiedostopäätteen:
$extension = $request->file('avatar')->extension();
Tiedoston näkyvyys
Laravelin Flysystem-integraatiossa ”näkyvyys” on tiedostojen käyttöoikeuksien abstraktio useilla alustoilla. Tiedostot voidaan ilmoittaa joko public
tai private
. Kun tiedosto ilmoitetaan public
, osoitat, että tiedoston pitäisi olla yleisesti muiden käytettävissä. Esimerkiksi S3-ajuria käytettäessä voit hakea URL-osoitteita public
-tiedostoille.
Näkyvyyden voi asettaa tiedostoa kirjoitettaessa metodilla put
:
use Illuminate\Support\Facades\Storage;Storage::put('file.jpg', $contents, 'public');
Jos tiedosto on jo tallennettu, sen näkyvyyden voi hakea ja asettaa metodeilla getVisibility
ja setVisibility
:
$visibility = Storage::getVisibility('file.jpg');Storage::setVisibility('file.jpg', 'public');
Vuorovaikutuksessa ladattujen tiedostojen kanssa voit käyttää storePublicly
– ja storePubliclyAs
-metodeja ladatun tiedoston tallentamiseen public
-näkyvyydellä:
$path = $request->file('avatar')->storePublicly('avatars', 's3');$path = $request->file('avatar')->storePubliclyAs( 'avatars', $request->user()->id, 's3');
Lokaalit tiedostot & Näkyvyys
Käyttäessäsi local
-ajuria public
-näkyvyys kääntyy 0755
-oikeuksiksi hakemistojen kohdalla 0755
:ksi käyttöoikeudeksi ja 0644
-oikeuksiksi tiedostoille. Voit muuttaa käyttöoikeuskartoituksia sovelluksesi filesystems
-konfiguraatiotiedostossa:
'local' => , 'dir' => , ],],
Tiedostojen poistaminen
Metodi delete
hyväksyy yhden tiedostonimen tai poistettavien tiedostojen joukon:
use Illuminate\Support\Facades\Storage;Storage::delete('file.jpg');Storage::delete();
Tarvittaessa voit määrittää levyn, jolta tiedosto poistetaan:
use Illuminate\Support\Facades\Storage;Storage::disk('s3')->delete('path/file.jpg');
Kansiot
Kerää kaikki tiedostot hakemistossa
Metodi files
palauttaa tietyn hakemiston kaikkien tiedostojen joukon. Jos haluat hakea luettelon kaikista tietyn hakemiston sisällä olevista tiedostoista, mukaan lukien kaikki alihakemistot, voit käyttää allFiles
-metodia:
use Illuminate\Support\Facades\Storage;$files = Storage::files($directory);$files = Storage::allFiles($directory);
Get All Directories Within A Directory
Metodi directories
palauttaa tietyn hakemiston sisällä olevien hakemistojen joukon. Lisäksi voit käyttää allDirectories
-metodia saadaksesi luettelon kaikista hakemiston sisällä olevista hakemistoista ja kaikista sen alihakemistoista:
$directories = Storage::directories($directory);$directories = Storage::allDirectories($directory);
Luo hakemisto
Metodilla makeDirectory
luodaan annettu hakemisto, mukaan lukien kaikki tarvittavat alihakemistot:
Storage::makeDirectory($directory);
Delete A Directory
Viimeiseksi metodilla deleteDirectory
voidaan poistaa hakemisto ja kaikki sen tiedostot:
Storage::deleteDirectory($directory);
Custom Filesystems
Laravelin Flysystem-integraatio tarjoaa tuen useille ”ajureille” suoraan laatikosta; Flysystem ei kuitenkaan rajoitu näihin, vaan siinä on sovittimet monille muillekin tallennusjärjestelmille. Voit luoda mukautetun ajurin, jos haluat käyttää jotakin näistä lisäsovittimista Laravel-sovelluksessasi.
Jotta voit määritellä mukautetun tiedostojärjestelmän, tarvitset Flysystem-sovittimen. Lisätään yhteisön ylläpitämä Dropbox-sovitin projektiimme:
composer require spatie/flysystem-dropbox
Seuraavaksi voit rekisteröidä ajurin yhden sovelluksesi palveluntarjoajan boot
-metodissa. Tätä varten kannattaa käyttää Storage
-fasadin extend
-metodia:
<?phpnamespace App\Providers;use Illuminate\Support\Facades\Storage;use Illuminate\Support\ServiceProvider;use League\Flysystem\Filesystem;use Spatie\Dropbox\Client as DropboxClient;use Spatie\FlysystemDropbox\DropboxAdapter;class AppServiceProvider extends ServiceProvider{ /** * Register any application services. * * @return void */ public function register() { // } /** * Bootstrap any application services. * * @return void */ public function boot() { Storage::extend('dropbox', function ($app, $config) { $client = new DropboxClient( $config ); return new Filesystem(new DropboxAdapter($client)); }); }}
Metodin extend
ensimmäinen argumentti on ohjaimen nimi ja toinen on sulkeminen, joka vastaanottaa muuttujat $app
ja $config
. Sulkeuman on palautettava League\Flysystem\Filesystem
:n instanssi. $config
-muuttuja sisältää config/filesystems.php
:ssä määritellyt arvot määritetylle levylle.
Kun olet luonut ja rekisteröinyt laajennuksen palveluntarjoajan, voit käyttää dropbox
-ajuria config/filesystems.php
-konfiguraatiotiedostossasi.
Kun olet luonut ja rekisteröinyt laajennuksen palveluntarjoajan, voit käyttäädropbox
-ajuriaconfig/filesystems.php
-konfiguraatiotiedostossa.
Leave a Reply