Gestione File Storage
Laravel dispone di un livello di astrazione di storage basato su Flysystem, dunque permette di lavorare con lo storage dei file in locale, su Amazon S3 e Rackspace. Cambiare da uno all’altro non comporta cambiamenti di sintassi nel codice.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
'local' => [ 'driver' => 'local', 'root' => storage_path('app'), ], 'public' => [ 'driver' => 'local', 'root' => storage_path('app/public'), 'url' => env('APP_URL').'/storage', 'visibility' => 'public', ], 's3' => [ 'driver' => 's3', 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), 'region' => env('AWS_DEFAULT_REGION'), 'bucket' => env('AWS_BUCKET'), ], |
I ‘dischi’ di storage vengono gestiti in config/filesystems.php.
Public Disk
Il disco public è inteso come il disco dove verranno salvati i file accessibili pubblicamente. Di default, il disco public usa il driver local e salva i file in storage/app/public. Per renderli accessibili bisogna creare un link simbolico
da public/storage a storage/app/public
1 |
php artisan storage:link |
Caricare un file
Consideriamo il seguente form per caricare un avatar
1 2 3 4 |
<form action="/avatar" method="POST" enctype="multipart/form-data"> {{ csrf_field() }} <input type="file" name="avatar"> <button type="submit"></button> </form> |
Salvare questo file su disco è facilissimo
1 2 3 4 5 |
public function update(Request $request) { $path = $request->file('avatar')->store('avatars'); return $path; } |
Estraiamo il file dalla richiesta e specifichiamo la cartella dove salvarla. Restituiamo il path del file
e specifichiamo un filename
1 |
$fileurl = $request->file('avatar')->storeAs('avatars', $request->user()->id); |
1 2 3 |
$fileUrl = Storage::putFileAs( 'avatars', $request->file('avatar'), $request->user()->id ); |
Dato che la funzione store userà il vostro disco predefinito, è dunque possibile specificare un altro disco durante il salvataggio file
1 2 |
$filePath = $request->file('avatar') ->store( 'avatars/'.$request->user()->id, 's3'); |
1 2 |
$filePath = Storage::disk('s3) ->putFile('avatars', $request->file('avatar')); |
Dal disco di default, specificando il path relativo…
1 2 3 |
use Illuminate\Support\Facades\Storage; ... $avatar = Storage::get('avatar.jpg'); |
La funzione userà il vostro disco predefinito ed è dunque possibile specificare un altro disco.
1 2 3 |
use Illuminate\Support\Facades\Storage; ... $avatar = Storage::disk('s3')->get('avatar.jpg'); |
Se la guida ti è piaciuta e se pensi che possa essere opportuno per te procedere nello studio approfondito di Laravel, condividi sul tuo profilo Facebook questa guida e richiedi maggiori informazioni a amministrazione@laramind.com.