✅ WEB ja WordPressi uudised, teemad, pistikprogrammid. Siin jagame näpunäiteid ja parimaid veebisaidi lahendusi.

Kuidas faili S3 üles laadida, kasutades Laraveli failisüsteemi

16

Hiljuti avaldasin artikli AWS PHP SDK abil failide üleslaadimine Amazon S3-sse. Üks meie lugejatest küsis, kuidas AWS S3 failifailide üleslaadimist Laraveli abil teha. Mis puutub Laraveli, siis peame PHP-ga võrreldes järgima teistsugust rada. Selles artiklis uurime, kuidas fail üles laadida S3-sse, kasutades Laraveli failisüsteemi.

Laraveli failisüsteem pakub erinevaid draivereid töötamiseks kohaliku failisüsteemi, Amazon S3, Rackspace’i jne abil. Need draiverid pakuvad mugavat ja lihtsat viisi failide üleslaadimiseks kohapeal või pilves.

Amazon S3 on populaarne teenus piltide, failide ja dokumentide salvestamiseks. Teiseks aitab failide pilves hoidmine säästa teie veebisaidi jaoks palju ribalaiust. See säästab teie hostimisruumi, lisaks on pilve jõudlus skaleeritav.

Seda öeldes vaatame, kuidas faili S3-sse Laraveli failisüsteemi abil üles laadida.

Hankige oma AWS-i turvamandaadid

S3-ga alustamiseks peaks teil olema konto Amazon Web Servicesis. Kui see on olemas, aktiveerige kindlasti teenus S3.

Pärast S3-teenuse aktiveerimist hankige oma turvakirjad, mida vajame juhendaja hilisemas osas.

Kuidas faili S3 üles laadida, kasutades Laraveli failisüsteemi

S3 draiveri konfiguratsioon Laravelis

Nagu öeldud, hakkan kasutama Laraveli failisüsteemi. See nõuab S3 draiveri konfigureerimist. Minge oma toimetaja juurde ja avage fail config/filesystems.php. Selles failis näete draiverit, mis on S3 jaoks määratletud jaotises ‘kettad’.

config / filesystems.php

<?php
 
return [
 
    .....
 
    'disks' => [
 
        .....
 
        's3' => [
            'driver' => 's3',
            'key' => env('AWS_ACCESS_KEY_ID'),
            'secret' => env('AWS_SECRET_ACCESS_KEY'),
            'region' => env('AWS_DEFAULT_REGION'),
            'bucket' => env('AWS_BUCKET'),
            'url' => env('AWS_URL'),
            'endpoint' => env('AWS_ENDPOINT'),
        ],
 
    ],
];

Ülaltoodud koodis kasutab Laravel väärtuste määramiseks meetodit env(). See tähendab, et peate need konstandid oma .envfailis määratlema. Te ei pea määratlema konstante AWS_URL ja AWS_ENDPOINT, kuna see pole failide üleslaadimiseks S3 ämbrisse vajalik.

AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=
AWS_BUCKET=

Lisage väärtus igale ülalolevale konstandile. Seejärel avage terminal oma projekti juurkataloogis ja käivitage käsk:

composer require league/flysystem-aws-s3-v3 ~1.0

See käsk installib vajaliku teegi, mis kutsub AWS-i API-d ja teeb pilvetoiminguid.

Laadige fail üles Laraveli S3-sse

Me kõik seadistasime põhikonfiguratsiooniga. Nüüd saame tegeleda failide üleslaadimise tegeliku osaga. Loome lihtsa vormi koos faili sisestamise ja esitamise nupuga.

Lisage allpool olev kood oma labafaili.

<form action="{{ url('ROUTE_URL') }}" method="post" enctype="multipart/form-data">
    <div class="form-group">
        <label for="exampleInputFile">File input</label>
        <input type="file" name="profile_image" id="exampleInputFile">
    </div>
    {{ csrf_field() }}
    <button type="submit" class="btn btn-default">Submit</button>
</form>

Asendage kohatäide ROUTE_URL oma tegeliku marsruudiga.

Laravel annab Storagefassaadi, mida kasutatakse konfigureeritud ketastega suhtlemiseks. Meie puhul on kettaks S3. Lisage Storagekontrolleris fassaad järgmiselt:

<?php
 
namespace AppHttpControllers;
 
use IlluminateHttpRequest;
use IlluminateSupportFacadesStorage;
...
...

Pärast fassaadi lisamist saate faile üles laadida S3-le. Kirjutage allpool olev kood oma meetodisse, mis saadab faili S3-le.

<?php
...
...
public function store(Request $request)
{
    if($request->hasFile('profile_image')) {
 
        //get filename with extension
        $filenamewithextension = $request->file('profile_image')->getClientOriginalName();
 
        //get filename without extension
        $filename = pathinfo($filenamewithextension, PATHINFO_FILENAME);
 
        //get file extension
        $extension = $request->file('profile_image')->getClientOriginalExtension();
 
        //filename to store
        $filenametostore = $filename.'_'.time().'.'.$extension;
 
        //Upload File to s3
        Storage::disk('s3')->put($filenametostore, fopen($request->file('profile_image'), 'r+'), 'public');
 
        //Store $filenametostore in the database
    }
}

Ülaltoodud koodis genereerin failile ainulaadse nime ja laadisin selle seejärel S3-sse. Kasutaja peaks failinime hilisemaks kasutamiseks andmebaasi salvestama. Faili S3-sse üleslaadimise ajal andsin kolmanda parameetri „avalikuks". Kui te ei soovi faili avalikuks määrata, jätke see parameeter vahele.

Kasutaja saab üleslaaditud faili URL-i saada koodi abil:

$url = Storage::disk('s3')->url('YOUR_FILENAME_HERE');

Faili kustutamiseks S3 ämbrist kasutage kustutamismeetodit, nagu allpool näidatud.

Storage::disk('s3')->delete('YOUR_FILENAME_HERE');

See kõik käib selle kohta, kuidas fail Laraveli failisüsteemi abil S3-sse üles laadida. Loodan, et saite teada Laraveli pakutavast süsteemist Amazon S3-ga suhtlemiseks. Palun jagage oma mõtteid ja ettepanekuid allpool olevas kommentaaride jaotises.

seotud artiklid

See veebisait kasutab teie kasutuskogemuse parandamiseks küpsiseid. Eeldame, et olete sellega rahul, kuid saate soovi korral loobuda. Nõustu Loe rohkem