Pakowanie i pobieranie ZIP w Laravel


14 stycznia 2019 / Michał Kortas


Pracuję ostatnio trochę z Laravelem, zatem w przyszłości może powstać kilka krótkich wpisów na ten temat. Dzisiaj pierwsza rzecz, prosta ale często przydatna – pakowanie plików do ZIP z opcjonalnym pobieraniem archiwum.

Tworzenie archiwum ZIP

Skorzystamy z klasy ZipArchive.

use ZipArchive; 

Zaczniemy od krótkiej deklaracji ścieżki i nazwy nowego archiwum ZIP.

$downloadDir= '../download';

$archiveFileName = 'archive.zip'; 

Tworzymy nowy obiekt klasy ZipArchive.

$zip = new ZipArchive; 

Sprawdzamy, czy archiwum może być utworzone we wskazanej ścieżce. Tutaj za chwilę będziemy pakować pliki.

if ($zip->open($downloadDir. '/' . $archiveFileName, ZipArchive::CREATE) === TRUE) 
{
    // tutaj pakujemy pliki        
    $zip->close();
} 

Pakowanie plików

Sprawdzamy, czy plik istnieje, a następnie dorzucamy do do paczki. Opcjonalnie możemy przypisać mu nową nazwę.

$file = '../path/to/file.pdf';

if(file_exists($file))
$zip->addFile($file, 'New Name.pdf'); 

Pobieranie archiwum ZIP

Przekazujemy ścieżkę pliku, jego nazwę…

if(file_exists($downloadDir. '/' . $archiveFileName))
{
    return response()->download($downloadDir. '/' . $archiveFileName,   $archiveFileName, $headers);
} 

Naszym nagłówkiem będzie:

$headers = array(
    'Content-Type' => 'application/octet-stream',
); 

Po wykonaniu skryptu przeglądarka uruchomi pobieranie.

Zapisywanie pliku ZIP

Podsumowanie

To w zasadzie wszystko. Pełny kod możecie podejrzeć na moim GitHubie.


Tagi: