En nuestro artículo anterior llamado Subir archivos en laravel, aprendimos a guardar archivos en nuestra aplicación y hacer uso de ellos.
En este artículo vamos aprender a comprimir archivos que tenga nuestra aplicación antes de descargarlos, haciendo uso de la librería Zipper.
Para hacer uso de Zipper, vamos a descargarlo en nuestro proyecto mediante composer:
composer require chumper/zipper
Una vez tengamos Zipper, nos dirigimos a config/app.php y en el apartado de providers y lo añadiremos:
...
...
Chumper\Zipper\ZipperServiceProvider::class,
Y más abajo, en el apartado de Aliases, le darémos el nombre con el que llamaremos a la librería:
...
...
'Zipper' => Chumper\Zipper\Zipper::class,
Nos dirigimos al controlador donde queramos añadir esta funcionalidad, importaremos la librería Zipper y crearemos la siguiente función:
<?php
...
use Zipper;
class Controller extends BaseController
{
...
public function comprimirDescargar()
{
/*Añadimos la ruta donde se encuentran los archivos que queramos comprimir,
en este ejemplo comprimimos todos los que se encuentran en la carpeta
storage/app/public*/
$files = glob(storage_path('app/public/*'));
/* Le indicamos en que carpeta queremos que se genere el zip y los comprimimos*/
Zipper::make(storage_path('app/public/ejemplo.zip'))->add($files)->close();
/* Por último, si queremos descarlos, indicaremos la ruta del archiv, su nombre
y lo descargaremos*/
return response()->download(storage_path('app/public/ejemplo.zip'));
}
}
En este caso, estamos haciendo uso de la ruta storage, ya que en el artículo anterior vimos como subir archivos a esta carpeta, pero también podemos hacer uso de la carpeta public cambiando el helper storage_path por public_path.
Ahora, creamos la ruta para llamar a la función:
Route::get('/comprimir', 'Controller@comprimirDescargar')->name('comprimir');
Y por último, podemos crear un enlace en nuestra vista para ver que todo funciona correctamente:
<a href="{{route('comprimir')}}">Comprimir y descargar</a>
De esta forma ¡Nos descargaría todo el contenido de la carpeta que le hayamos indicado en un archivo zip con el nombre de ejemplo.zip!