Автор оригинала: David Wong.
От: https://learnku.com/ларавель/т…
Дополнительные статьи: https://learnku.com/laravel/c…
Если вам нужно, чтобы ваши пользователи поддерживали несколько загрузок файлов, лучший способ-создать сжатый пакет и обеспечить загрузку. Посмотрите на реализацию в Laravel.
На самом деле, речь идет не о Laravel, а скорее о PHP. Мы собираемся использовать классы ZipArchive, которые существуют начиная с PHP 5.2. Если вы хотите их использовать, вам нужно убедиться, что php .ini Средний ext-zip Открывается расширение.
Задача 1. Сохраните файл счета пользователя в хранилище/счета-фактуры/Задача 1. Сохраните файл счета пользователя в хранилище/счета-фактуры/
Вот презентация кода:
$zip_file ='invoices.zip'; // Name of the package to download // Initialize PHP classes $zip = new \ZipArchive(); $zip->open($zip_file, \ZipArchive::CREATE | \ZipArchive::OVERWRITE); $invoice_file = 'invoices/aaa001.pdf'; // Add Files: The second parameter is the path of the file to be compressed in the compressed package // So it will create another path called "storage/" in ZIP and put the file in the directory. $zip->addFile(storage_path($invoice_file), $invoice_file); $zip->close(); // We will return the file to the original immediately after downloading it. return response()->download($zip_file);
Пример прост, не так ли?
- *
Задача 2:Сжатие всех документов в каталог хранения/счетов-фактур
Laravel не нуждается в каких-либо изменениях, нам просто нужно добавить какой-то простой PHP-код для перебора этих файлов.
$zip_file = 'invoices.zip';
$zip = new \ZipArchive();
$zip->open($zip_file, \ZipArchive::CREATE | \ZipArchive::OVERWRITE);
$path = storage_path('invoices');
$files = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($path));
foreach ($files as $name => $file)
{
// We need to skip all subdirectories
if (!$file->isDir()) {
$filePath = $file->getRealPath();
// Getting File Extensions with Substir/strlen
$relativePath = 'invoices/' . substr($filePath, strlen($path) + 1);
$zip->addFile($filePath, $relativePath);
}
}
$zip->close();
return response()->download($zip_file);Здесь все почти готово. Видите ли, вам не нужны никакие расширения Laravel для реализации этого сжатия.
От: https://learnku.com/laravel/t…
Дополнительные статьи: https://learnku.com/laravel/c…
Оригинал: “https://developpaper.com/create-zip-compressed-files-in-laravel-and-provide-downloads/”