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.