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.phpmää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 filespalauttaa 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 directoriespalauttaa 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