Improve .zip functionality

This commit is contained in:
David Bomba 2022-02-18 20:55:44 +11:00
parent 6d10160f33
commit 5259728443
3 changed files with 120 additions and 13 deletions

View File

@ -228,21 +228,54 @@ class InvoiceController extends Controller
}, basename($file), ['Content-Type' => 'application/pdf']);
}
// enable output of HTTP headers
$options = new Archive();
$options->setSendHttpHeaders(true);
return $this->buildZip($invoices);
// create a new zipstream object
$zip = new ZipStream(date('Y-m-d').'_'.str_replace(' ', '_', trans('texts.invoices')).'.zip', $options);
// // enable output of HTTP headers
// $options = new Archive();
// $options->setSendHttpHeaders(true);
foreach ($invoices as $invoice) {
// // create a new zipstream object
// $zip = new ZipStream(date('Y-m-d').'_'.str_replace(' ', '_', trans('texts.invoices')).'.zip', $options);
#add it to the zip
$zip->addFile(basename($invoice->pdf_file_path()), file_get_contents($invoice->pdf_file_path(null, 'url', true)));
// foreach ($invoices as $invoice) {
// #add it to the zip
// $zip->addFile(basename($invoice->pdf_file_path()), file_get_contents($invoice->pdf_file_path(null, 'url', true)));
// }
// // finish the zip stream
// $zip->finish();
}
private function buildZip($invoices)
{
// create new archive
$zipFile = new \PhpZip\ZipFile();
try{
foreach ($invoices as $invoice) {
#add it to the zip
$zipFile->addFromString(basename($invoice->pdf_file_path()), file_get_contents($invoice->pdf_file_path(null, 'url', true)));
}
$filename = date('Y-m-d').'_'.str_replace(' ', '_', trans('texts.invoices')).'.zip';
$filepath = sys_get_temp_dir() . '/' . $filename;
$zipFile->saveAsFile($filepath) // save the archive to a file
->close(); // close archive
return response()->download($filepath, $filename)->deleteFileAfterSend(true);
}
// finish the zip stream
$zip->finish();
catch(\PhpZip\Exception\ZipException $e){
// handle exception
}
finally{
$zipFile->close();
}
}
}

View File

@ -67,6 +67,7 @@
"livewire/livewire": "^2.6",
"maennchen/zipstream-php": "^1.2",
"mollie/mollie-api-php": "^2.36",
"nelexa/zip": "^4.0",
"nwidart/laravel-modules": "^8.0",
"omnipay/paypal": "^3.0",
"payfast/payfast-php-sdk": "^1.1",
@ -149,4 +150,4 @@
},
"minimum-stability": "dev",
"prefer-stable": true
}
}

75
composer.lock generated
View File

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "f430e1dc06c72464f547ba0bb71226cf",
"content-hash": "ebb191c91f4011a448605a0fd725faff",
"packages": [
{
"name": "apimatic/jsonmapper",
@ -5582,6 +5582,79 @@
],
"time": "2021-07-05T08:18:36+00:00"
},
{
"name": "nelexa/zip",
"version": "4.0.1",
"source": {
"type": "git",
"url": "https://github.com/Ne-Lexa/php-zip.git",
"reference": "a18f80db509b1b6e9798e2745dc100759107f50c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Ne-Lexa/php-zip/zipball/a18f80db509b1b6e9798e2745dc100759107f50c",
"reference": "a18f80db509b1b6e9798e2745dc100759107f50c",
"shasum": ""
},
"require": {
"ext-zlib": "*",
"php": "^7.4 || ^8.0",
"psr/http-message": "*",
"symfony/finder": "*"
},
"require-dev": {
"ext-bz2": "*",
"ext-dom": "*",
"ext-fileinfo": "*",
"ext-iconv": "*",
"ext-openssl": "*",
"ext-xml": "*",
"friendsofphp/php-cs-fixer": "^3.4.0",
"guzzlehttp/psr7": "^1.6",
"phpunit/phpunit": "^9",
"symfony/http-foundation": "*",
"symfony/var-dumper": "*",
"vimeo/psalm": "^4.6"
},
"suggest": {
"ext-bz2": "Needed to support BZIP2 compression",
"ext-fileinfo": "Needed to get mime-type file",
"ext-iconv": "Needed to support convert zip entry name to requested character encoding",
"ext-openssl": "Needed to support encrypt zip entries or use ext-mcrypt"
},
"type": "library",
"autoload": {
"psr-4": {
"PhpZip\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Ne-Lexa",
"email": "alexey@nelexa.ru",
"role": "Developer"
}
],
"description": "PhpZip is a php-library for extended work with ZIP-archives. Open, create, update, delete, extract and get info tool. Supports appending to existing ZIP files, WinZip AES encryption, Traditional PKWARE Encryption, BZIP2 compression, external file attributes and ZIP64 extensions. Alternative ZipArchive. It does not require php-zip extension.",
"homepage": "https://github.com/Ne-Lexa/php-zip",
"keywords": [
"archive",
"extract",
"unzip",
"winzip",
"zip",
"ziparchive"
],
"support": {
"issues": "https://github.com/Ne-Lexa/php-zip/issues",
"source": "https://github.com/Ne-Lexa/php-zip/tree/4.0.1"
},
"time": "2021-12-12T09:50:45+00:00"
},
{
"name": "nesbot/carbon",
"version": "2.56.0",