✅ WEB- ja WordPress -uutiset, -teemat, -laajennukset. Täällä jaamme vinkkejä ja parhaita verkkosivustoratkaisuja.

Kuinka ladata tiedosto S3: een Laravel-tiedostojärjestelmän avulla

24

Äskettäin olen julkaissut artikkelin Tiedostojen lataaminen Amazon S3: een AWS PHP SDK: n avulla. Yksi lukijoistamme kysyi, miten AWS S3 -lataustiedostotoimet suoritetaan Laravelin kanssa. Mitä tulee Laraveliin, meidän on noudatettava eri raitaa kuin PHP. Tässä artikkelissa tutkitaan, miten tiedosto ladataan S3: een Laravel-tiedostojärjestelmän avulla.

Laravel Filesystem tarjoaa erilaisia ​​ohjaimia toimimaan paikallisen tiedostojärjestelmän, Amazon S3: n, Rackspacen jne. Kanssa. Nämä ohjaimet tarjoavat kätevän ja helpon tavan ladata tiedostoja paikallisesti tai pilvipalveluun.

Amazon S3 on suosittu palvelu kuvien, tiedostojen ja asiakirjojen tallentamiseen. Toiseksi tiedostojen pitäminen pilvessä säästää paljon kaistanleveyttä verkkosivustollesi. Se säästää isännöintitilaa ja pilvipalvelun suorituskyky on skaalautuva.

Tämän jälkeen katsotaanpa, kuinka tiedosto ladataan S3: een Laravel-tiedostojärjestelmän avulla.

Hanki AWS-suojaustiedot

S3: n käytön aloittamiseksi sinulla on oltava tili Amazon Web Services -palvelussa. Kun sinulla on se, aktivoi S3-palvelu.

Kun olet aktivoinut S3-palvelun, hanki suojaustiedot, joita tarvitsemme opetusohjelman myöhemmässä osassa.

Kuinka ladata tiedosto S3: een Laravel-tiedostojärjestelmän avulla

S3-ohjaimen määritykset Laravelissa

Kuten sanoin, aion käyttää Laravel-tiedostojärjestelmää. Se vaatii S3-ohjaimen määrittämisen. Siirry editoriisi ja avaa tiedosto config/filesystems.php. Tässä tiedostossa näet S3: lle määritetyn ohjaimen kohdassa ‘levyt’.

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'),
        ],
 
    ],
];

Yllä olevassa koodissa Laravel käyttää arvoja asettamalla env() -menetelmän. Tämä tarkoittaa, että sinun on määriteltävä nämä vakiot .envtiedostossasi. Sinun ei tarvitse määrittää AWS_URL- ja AWS_ENDPOINT-vakioita, koska sitä ei vaadita tiedostojen lataamiseen S3-ämpäriin.

AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=
AWS_BUCKET=

Lisää arvo kuhunkin yllä olevaan vakioon. Avaa seuraavaksi pääte projektin juurihakemistossa ja suorita komento:

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

Tämä komento asentaa vaaditun kirjaston, joka kutsuu AWS-sovellusliittymän ja suorittaa pilvioperaatiot.

Lataa tiedosto S3: een Laravelissa

Me kaikki asetimme perusmäärityksillä. Nyt voimme siirtyä tiedostojen lataamisen todelliseen osaan. Luodaan yksinkertainen lomake, jossa on tiedoston syöttö- ja lähetyspainike.

Lisää alla oleva koodi korttitiedostoon.

<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>

Korvaa paikkamerkki ROUTE_URL todellisella reitilläsi.

Laravel antaa Storagejulkisivun, jota käytetään vuorovaikutuksessa määritettyjen levyjen kanssa. Meidän tapauksessamme levy on S3. Lisää Storagejulkisivu ohjaimeen seuraavasti:

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

Kun olet sisällyttänyt julkisivun, voit ladata tiedostoja S3: een. Kirjoita alla oleva menetelmä menetelmään, joka lähettää tiedoston S3: een.

<?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
    }
}

Yllä olevassa koodissa luon tiedostolle yksilöllisen nimen ja lähetän sen sitten S3: een. Käyttäjän tulee tallentaa tiedostonimi tietokantaan myöhempää käyttöä varten. Ladatessani tiedostoa S3: een läpäisin kolmannen parametrin nimellä ‘public’. Jos et halua asettaa tiedostoa julkiseksi, ohita tämä parametri.

Käyttäjä voi saada ladatun tiedoston URL-osoitteen koodilla:

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

Jos haluat poistaa tiedoston S3-ämpäristä, käytä poistomenetelmää alla olevan kuvan mukaisesti.

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

Kyse on siitä, miten tiedosto ladataan S3: een Laravel-tiedostojärjestelmän avulla. Toivon, että sait tietää järjestelmästä, jonka Laravel tarjoaa vuorovaikutuksessa Amazon S3: n kanssa. Jaa ajatuksesi ja ehdotuksesi alla olevassa kommenttiosassa.

Aiheeseen liittyvät artikkelit

Tämä verkkosivusto käyttää evästeitä parantaakseen käyttökokemustasi. Oletamme, että olet kunnossa, mutta voit halutessasi kieltäytyä. Hyväksyä Lisätietoja