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.
'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
php artisan storage:link
Caricare un file
Consideriamo il seguente form per caricare un avatar
<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
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
$fileurl = $request->file('avatar')->storeAs('avatars', $request->user()->id);
$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
$filePath = $request->file('avatar') ->store( 'avatars/'.$request->user()->id, 's3');
$filePath = Storage::disk('s3) ->putFile('avatars', $request->file('avatar'));
Dal disco di default, specificando il path relativo…
use Illuminate\Support\Facades\Storage; ... $avatar = Storage::get('avatar.jpg');
La funzione userà il vostro disco predefinito ed è dunque possibile specificare un altro disco.
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.