✅ Notizie, temi, plugin WEB e WordPress. Qui condividiamo suggerimenti e le migliori soluzioni per siti web.

Come caricare file su S3 utilizzando Laravel Filesystem

43

Recentemente ho pubblicato un articolo Carica file su Amazon S3 utilizzando AWS PHP SDK. Uno dei nostri lettori ha chiesto come eseguire operazioni sui file di caricamento di AWS S3 con Laravel. Quando si tratta di Laravel, dobbiamo seguire una pista diversa rispetto a PHP. In questo articolo, studiamo come caricare un file su S3 utilizzando un filesystem Laravel.

Laravel Filesystem fornisce diversi driver per lavorare con il filesystem locale, Amazon S3, Rackspace, ecc. Questi driver forniscono un modo comodo e semplice per caricare file localmente o sul cloud.

Amazon S3 è un servizio popolare per l’archiviazione di immagini, file e documenti. In secondo luogo, conservare i tuoi file sul cloud farà risparmiare molta larghezza di banda per il tuo sito web. Risparmia il tuo spazio di hosting e le prestazioni del cloud sono scalabili.

Detto questo, diamo un’occhiata a come caricare un file su S3 utilizzando il Laravel Filesystem.

Ottieni le tue credenziali di sicurezza AWS

Per iniziare con S3, dovresti avere un account su Amazon Web Services. Una volta ottenuto, assicurati di attivare il servizio S3.

Dopo aver attivato il servizio S3, ottieni le tue credenziali di sicurezza di cui avremo bisogno nella parte successiva del tutorial.

Come caricare file su S3 utilizzando Laravel Filesystem

Configurazione del driver S3 in Laravel

Come detto userò il Laravel Filesystem. Richiede la configurazione del driver S3. Vai al tuo editor e apri il file config/filesystems.php. In questo file, puoi vedere il driver definito per S3 in "dischi".

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

Nel codice sopra Laravel usa il metodo env() per impostare i valori. Ciò significa che devi definire queste costanti nel tuo .envfile. Non è necessario definire le costanti AWS_URL e AWS_ENDPOINT poiché non è necessario per caricare i file nel bucket S3.

AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=
AWS_BUCKET=

Aggiungi il valore a ciascuna costante sopra. Quindi, apri il terminale nella directory principale del tuo progetto ed esegui il comando:

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

Questo comando installerà la libreria richiesta che chiama l’API AWS ed esegue le operazioni cloud.

Carica un file su S3 in Laravel

Abbiamo impostato tutto con la configurazione di base. Ora possiamo passare alla parte effettiva del caricamento dei file. Creiamo un semplice modulo con l’input del file e il pulsante di invio.

Aggiungi il codice seguente nel tuo file blade.

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

Sostituisci il segnaposto ROUTE_URL con il tuo percorso effettivo.

Laravel fornisce una Storagefacciata che interagiva con i dischi configurati. Nel nostro caso, il disco è S3. Aggiungi la Storagefacciata nel controller come segue:

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

Dopo aver incluso una facciata, puoi caricare file su S3. Scrivi il codice qui sotto nel tuo metodo che invia il file su S3.

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

Nel codice sopra, sto generando un nome univoco per il file e quindi lo carico su S3. Un utente dovrebbe memorizzare il nome del file nel database per un uso successivo. Durante il caricamento di un file su S3 ho passato il terzo parametro come "pubblico". Se non vuoi impostare il file come "pubblico", salta questo parametro.

L’utente può ottenere l’URL del file caricato utilizzando il codice:

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

Per eliminare un file dal bucket S3, utilizzare il metodo di eliminazione come mostrato di seguito.

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

Si tratta di come caricare un file su S3 utilizzando Laravel Filesystem. Spero che tu abbia avuto modo di conoscere il sistema fornito da Laravel per interagire con Amazon S3. Si prega di condividere i tuoi pensieri e suggerimenti nella sezione commenti qui sotto.

articoli Correlati

Fonte di registrazione: artisansweb.net

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More