In this tutorial, i will tell you how to create zip file for download in Laravel 5 and how to add multiple files to zip archive file.
With ZipArchive
class, you can create zip file with multiple files.
You have to define directory first where zip file will be created with the name.
Now create a zip file by using ZipArchive::CREATE
and then open this zip file by using $zip->open()
method.
If $zip->open()
return true then we will add file to zip file, To add any file you need file path and file name. File will be created within zip file with given file name. File name will override the original file name by supplied file name in $zip->addFile()
method.
At the end don't forget to close zip file, you can close zip file by using $zip->close()
method.
If you want to force download then set header correclty.
response()->download()
method in Laravel is used to download the file from given path.
First argument of this method accepts the file path, second argument accepts file name and finally in third argument you can pass HTTP headers as well.
- public function zipFileDownload(){
- $public_dir=public_path().'/uploads';
- $zipFileName = Carbon\Carbon::now().'.zip';
- $zip = new ZipArchive;
- if ($zip->open($public_dir . '/' . $zipFileName, ZipArchive::CREATE) === TRUE) {
- $zip->addFile('file_path','file_name');
- $zip->close();
- }
- $headers = array(
- 'Content-Type' => 'application/octet-stream',
- );
- $filetopath=$public_dir.'/'.$zipFileName;
- if(file_exists($filetopath)){
- return response()->download($filetopath,$zipFileName,$headers);
- }
- return ['status'=>'file does not exist'];
- }
In above example i add one file to zip archive, you can add more files in loop.
- //add the files
- foreach($files as $file) {
- $zip->addFile($file->file_path,$file->file_name);
- }