Desenvolupament d'Aplicacions

Gestió de fitxers a Laravel

L'estructura principal de carpetes a Laravel inclou 'storage' i 'public', entre uns altres. A 'storage' és on se suposa que els fitxers que pugen els usuaris han de viure, però a aquesta carpeta se li pot fer un symlink a public perquè siguin fitxers accessibles per url.

Gestió de fitxers a Laravel

Exemple per gestionar fitxers amb Laravel

Per exemple, la imatge d'un post la posaríem aquí. Resumint molt podem pensar que al controller tenim alguna cosa semblant a:

$post = Post::create($request->all());

$file = $request->file('imagen')

$filename = $file->move(storage_path('app') . '/uploads/images/posts/' . $post->id);

$post->image()->create([

    'src' => '/uploads/images/posts/' . $post->id . '/' . $filename,

    ...

]);

D'aquesta forma i tenint el symlink podrem accedir a "'/uploads/images/posts/' . $post->id . '/' . $filename" i obtindrem la nostra imatge.

Però, què passa si un dels fitxers que tenim és una factura? No la podem guardar de manera que sigui accessible per qualsevol que tingui la URL.

Una possible solució és guardar-ho a una altra carpeta que no sigui la que fem el symlink, de manera que aquest fitxer no és accessible des de /public i després fer una ruta de l'estil:

Route::get('media/{media}', 'MediaController@show');

I al controller simplement fem response()->download($media->src). D'aquesta forma, el fitxer es descarregarà directament, així podrem fer comprovacions com 'auth' o 'ca' per delimitar que l'usuari pot descarregar aquest fitxer en concret.

Com l'exemple de les factures podem trobar molts: des d'arxius que depenen d'un usuari en concret o a un grup o a un atribut de l'usuari o només als usuaris autenticats...

En cas de tenir les imatges en serveis externs (a un FTP, per exemple) sempre podem utilitzar Storage per a totes aquestes operacions.

Comparteix aquest article

Articles Relacionats