Subir archivos en Laravel

Actualmente, la mayoría de aplicaciones que utilizamos hoy en día cuentan con la funcionalidad de trabajar con archivos que subimos a éstas, ya sea vídeos (Youtube), envío de documentos (Gmail), subir una imagen (Facebook) o simplemente para guardar archivos en la misma (Google drive).

En este artículo, aprenderemos como subir y guardar archivos en nuestra aplicación Laravel.

Creando el formulario

Lo primero que vamos a hacer, será crear un formulario con un único campo de tipo file, con el que elegiremos el archivo que queremos subir a nuestra aplicación:

<form method="POST" action="{{route('subir')}}" accept-charset="UTF-8" enctype="multipart/form-data">
  {{ csrf_field() }}
  <label for="archivo"><b>Archivo: </b></label><br>
  <input type="file" name="archivo" required>
  <input class="btn btn-success" type="submit" value="Enviar" >
</form>

Subiendo y guardando el archivo

Una vez hecho esto, crearemos una ruta y una función en el controlador que queramos:

Ruta

Creamos la ruta con nombre subir, que es a la que estamos haciendo referencia en el atributo action de nuestro formulario:

Route::post('/subir','Controller@subirArchivo')->name('subir');

Controlador

Por último, crearemos una función con nombre subirArchivo, que recibirá mediante request nuestro archivo:

...
...

//recordar añadir Request en el que caso que nuestro controlador no lo tenga importado
use Illuminate\Http\Request;

class Controller extends BaseController
{

...
 public function subirArchivo(Request $request)
 {
        //Recibimos el archivo y lo guardamos en la carpeta storage/app/public
        $request->file('archivo')->store('public');
        dd("subido y guardado");
 }

}

Accediendo al archivo 

Ahora que ya tenemos nuestro archivo guardado, podemos encontrarlo en la ruta storage/app/public pero para poder acceder a el mediante nuestra aplicación, debemos indicarle a laravel que queremos hacer uso de la carpeta storage, para ello debemos ejecutar este comando:

php artisan storage:link

Y de esta forma, ahora podremos llamar a estos archivos en nuestra vista.

Un ejemplo muy rápido para ver que nuestra carpeta storage es accesible, sería subir una imagen y llamarla:

<img src="/storage/nombreGeneradoDeNuestaImagen.png" alt="image">

Como podemos ver, no hace falta añadir storage/app/public, simplemente añadiendo storage y el nombre del archivo sería suficiente.

Sí te ha gustado está entrada, visita la continuación de este artículo: Comprimir archivos en Laravel , donde aprenderás a comprimir y descargar los archivos de una carpeta.