Рубрики
Uncategorized

Создавайте сжатые zip-файлы в Laravel и обеспечивайте загрузку

Автор оригинала: 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/”