2017-07-09 4 views
-1

Ich mache einen externen API-Aufruf, der mehrere Objekte mit Download-URL zurückgibt. Das sind alles PDF-s, von denen ich gerne einen einzelnen ZIP-Download-Link bereitstellen möchte.Laravel mehrere PDF zu ZIP

Die Art und Weise, wie es jetzt funktioniert, ist, dass ich jedes einzelne PDF in einen bestimmten Benutzerordner herunterlade und dann einen ZIP daraus mache und ihn dem Benutzer zurückschicke.

Ich sehe das als eine etwas langsame und ineffiziente Dinge zu tun, da der Benutzer einen anderen Download für die ZIP auslösen muss, und auf diese Weise bin ich Benutzer im Grunde für 2 Downloads der gleichen Datei Batch warten.

Gibt es einen klügeren Weg, damit umzugehen?

$path = '/user_downloads/' . Auth::user()->id . '/'; 

if (!Storage::disk('uploads')->has($path)) { 
    Storage::disk('uploads')->makeDirectory($path); 
} 

$zipper = new \Chumper\Zipper\Zipper; 
$zip_filename = 'zipped/' . uniqid() . '_merged.zip'; 
foreach (json_decode($res)->hits as $hit) { 
    $filename = public_path() . $path . uniqid() . '_file.pdf'; 
    copy($hit->document_download_link, $filename); 
    $zipper->make($zip_filename)->add($filename); 
} 

Antwort

1

Die add Methode kann eine Reihe von Dateien erhalten, so würde ich das Array von Dateien innerhalb des foreach erstellen und wenn Sie fertig sind, erstellen Sie die Zip:

foreach (json_decode($res)->hits as $hit) { 
copy($hit->document_download_link, $filename); 
$files[] = public_path() . $path . uniqid() . '_file.pdf'; 
} 

$zipper->make($zip_filename)->add($files); 
1

This question hat ein paar Möglichkeiten, wie Sie können die Dateien auf den Benutzer durch ein präsentieren, aber das ist weniger benutzerfreundlich und kann von Browsern blockiert werden.

Sie könnten wahrscheinlich auch verwenden JSZip (habe ich nicht zu genau betrachtet), aber das würde den Browser RAM verwenden, um die PDFs zu komprimieren, was nicht ideal ist, besonders auf mobilen Geräten.

Ich denke, Ihre aktuelle Lösung ist die beste.

+0

Ich verwende dieses Paket https: // Github .com/Chumper/Zipper und es funktioniert super. Ich habe mich nur über den Ansatz gewundert. Die Antwort wurde mit Code aktualisiert. Danke für die Einsicht – Norgul