Eccoci di nuovo con le nostre Super Guide Laravel, quelle che facciamo con il massimo impegno per divulgare questo framework MVC che sta a suo modo rivoluzionando il modo di essere developer e non solo! Oggi vediamo insieme la Gestione File Storage con Laravel, siete pronti? Mettetevi comodi comodi che cominciamo a vedere tutto nel dettaglio.

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.