Kuinka ladata tiedosto S3: een Laravel-tiedostojärjestelmän avulla
Ä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.
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 .env
tiedostossasi. 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 Storage
julkisivun, jota käytetään vuorovaikutuksessa määritettyjen levyjen kanssa. Meidän tapauksessamme levy on S3. Lisää Storage
julkisivu 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.