2017-07-09 32 views
-1

我想提出一個外部API調用,它返回幾個對象裏面下載網址。這些都是我想提供一個ZIP下載鏈接的PDF-s。Laravel多個PDF到ZIP

現在的工作方式是,我的每一個PDF下載到特定的用戶文件夾,然後製作ZIP了出來,並呈現回用戶。

我認爲這是一個有點慢,效率低下處事的用戶將有可能引發另一種下載的ZIP,這樣一來,我讓用戶基本上等待2個下載同一個文件一批。

是否有處理這種更智能的方式?

$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); 
} 

回答

1

add方法可以接收文件的陣列,所以,我想創建內部的foreach並在完成時,創建的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有幾個方法,你可以通過一個存在的文件給用戶,但是這是不太人性化,並可能通過瀏覽器被阻塞。

你也許也可以使用JSZip(並沒有仔細查看它),但是這會使用瀏覽器的RAM來壓縮PDF,這並不理想,尤其是在移動設備上。

我認爲你目前的解決方案是最好的。

+0

我使用這個包的https:// github上.com/Chumper/Zipper,它的效果很好。我只是想知道這種方法。用代碼更新了答案。感謝您的洞察力 – Norgul