2012-07-16 84 views
0

我正在爲imageboard類型的網站開發一個Safari擴展,我希望實現的一個更大的功能是能夠下載所有發佈的圖像(發佈的圖像,而不是全球頁面級圖像)。使用JavaScript和PHP下載圖像文件並返回一個zip文件

這裏也存在類似的問題,但我的觀點有點不同,因爲所討論的圖像是託管在完全不同的服務器上的。我一直在進行頭腦風暴,並認爲將所有圖像URL收集到一個JS數組中,然後將它發送到我的服務器以變成一個zip文件(強制下載,而不僅僅是文件的鏈接)將是最好的要走的路。我也希望在用戶下載後刪除壓縮文件。

我已經完成了大部分擴展功能,但是這一個功能讓我感到困惑。任何幫助將不勝感激。

我會如何去做這件事?

+2

你的問題是? – 2012-07-16 18:47:58

+1

它的哪個部分是你的?你可以使用PHP嗎? http://davidwalsh.name/create-zip-php – ametren 2012-07-16 18:48:57

+0

我試着在 – 2012-07-16 19:22:39

回答

0

您想要擴展程序與您的服務器聯繫以進行下載嗎?這是一個可怕的想法!在本地生成zip文件 - 這不是正常的JavaScript,它是一個擴展名 - 您可以完全訪問。

無論如何,假設你想這樣做,你有什麼麻煩?你會得到一個網址列表,將它們發送到你的服務器,你的服務器將它們下載,將它們壓縮併發送給用戶。 (「你的服務器下載它們」的部分應該讓你擔心!)

你有什麼問題?

+0

以下更好地解釋它,這本身並不是一個問題,我只是在熱門的時刻沒有練習過這類東西。 那麼你們是否說JavaScript本身可以創建檔案?據我所知,Safari不允許擴展程序訪問不在擴展包中的最終用戶文件。我認爲這意味着它無法寫入文件。 – 2012-07-16 19:14:14

+0

那麼你們是否說JavaScript可以自己製作檔案?據我所知,Safari不允許擴展程序訪問不在擴展包中的最終用戶文件。我認爲這意味着它無法寫入文件。基本上他們所能做的就是將內容注入目標並修改Safari本身。 基本上我能想到的唯一選擇是將圖像URL數組發送到PHP腳本並從中歸檔。如果這不是一個好主意,你們會怎麼做? 對不起,我沒有意識到有5分鐘的編輯限制。 – 2012-07-16 19:21:39

+0

@NikMatt你可以刪除以前的評論,或者留下它,只需添加其他信息,而不是在第二條評論中重複。 – Ariel 2012-07-16 20:22:40

0

您可以使用PHP的ZipArchive類來製作ZIP,然後將其流式傳輸到瀏覽器。

<?php 
// Create temp zip file 
$zip = new ZipArchive; 
$temp = tempnam(sys_get_temp_dir(), 'zip'); 
$zip->open($temp); 

// Add files 
$zip->addFromString('file.jpg', file_get_contents('http://path/to/file.jpg')); 
$zip->addFile('/this/is/my/file.txt'); 

// Write temp file 
$zip->close(); 

// Stream file to browser 
header('Content-Description: File Transfer'); 
header('Content-Type: application/octet-stream'); 
header('Content-Disposition: attachment; filename=myFile.zip'); 
header('Content-Transfer-Encoding: binary'); 
header('Expires: 0'); 
header('Cache-Control: must-revalidate'); 
header('Pragma: public'); 
header('Content-Length: ' . filesize($temp)); 

readfile($temp); 

unlink($temp); 
exit;