Come caricare file su S3 utilizzando Laravel Filesystem
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.
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 .env
file. 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 Storage
facciata che interagiva con i dischi configurati. Nel nostro caso, il disco è S3. Aggiungi la Storage
facciata 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
- Una guida per caricare e comprimere immagini in Laravel
- Come eseguire il backup dell’applicazione Laravel
- Backup dell’applicazione Laravel su Dropbox