Hello Artisan,
In this tutorial, I will explain about how to download multiple files as a zip file using laravel. So in this laravel 8 ziparchive tutorial, you will learn how to download files recursively in laravel.
That means, assume we have a folder there is a bunch of files. So now we will download all of those folders one by one recursively in Laravel application. So if you don't know how to do laravel create a zip file and download them recursively, then this example is for you.
To create this zip file recursively, we don't need any packages. Cause PHP provides ZipArchive to create a zip folder and download. So let's start:
Step 1: Add Route
In the first step, we have to create a route to show simple Create ZIP
Button. So let's add it
routes/web.php
Route::get('zip-download', 'App\Http\Controllers\ProductController@zipDownload')->name('zip-download');
Step 2: Create Download Zip Button
In this step, we will create a download zip button. So add this code where you want to show the download zip button.
Step 3: Create Controller
Now to create laravel zip folder and download system, we need to implement our code. We will download files recursively. So update your controller like below:
namespace App\Http\Controllers;
use App\Http\Requests;
use Illuminate\Http\Request;
use File;
use ZipArchive;
class ZipArchiveController extends Controller
{
/**
* Show the application dashboard.
*
* @return \Illuminate\Http\Response
*/
public function zipDownload(Request $request)
{
if($request->has('download')) {
$zip = new ZipArchive;
$fileName = 'attachment.zip';
if ($zip->open(public_path($fileName), ZipArchive::CREATE) === TRUE) {
$files = File::files(public_path('uploads/file'));
foreach ($files as $key => $value) {
$relativeName = basename($value);
$zip->addFile($value, $relativeName);
}
$zip->close();
}
return response()->download(public_path($fileName));
}
}
}
Read also: How to Fix Cross Site Scripting Vulnerability in Laravel
Make sure, your all files are located in uploads/file
directory. Hope it can help you.
#laravel #laravel-8x #ziparchive