Gestión de ficheros en Laravel
La estructura principal de carpetas en Laravel incluye 'storage' y 'public', entre otros. En 'storage' es donde se supone que los ficheros que suben los usuarios deben vivir, pero a esta carpeta se le puede hacer un symlink en public para que sean ficheros accesibles por url.
Ejemplo para gestionar ficheros con Laravel
Por ejemplo, la imagen de un post la pondríamos ahí. Resumiendo mucho podemos pensar que en el controller tenemos algo parecido 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,
...
]);
De esta forma y al tener el symlink podremos acceder a "'/uploads/images/posts/' . $post->id . '/' . $filename" y obtendremos nuestra imagen.
Pero, ¿qué pasa si uno de los ficheros que tenemos es una factura? No la podemos guardar de forma que sea accesible por culaquiera que tenga la URL.
Una posible solución es guardarlo en otra carpeta que no sea la que hacemos el symlink, de forma que ese fichero no es accesible desde /public y después hacer una ruta al estilo de:
Route::get('media/{media}', 'MediaController@show');
Y en el controller simplemente hacemos response()->download($media->
Como el ejemplo de las facturas podemos encontrar muchos: desde archivos que dependen de un usuario en concreto o a un grupo o a un atributo del usuario o solo a los usuarios autenticados...
En caso de tener las imágenes en servicios externos (en un FTP, por ejemplo) siempre podemos utilizar Storage para todas estas operaciones.
Comparte este artículo