2011-08-08 95 views
2

我正在構建一個簡單的可視化下載程序。用戶選擇他們想要下載的文件,然後下載這些文件。但是我處理的文件相當大。我所做的是讓用戶選擇他們需要的文件,並通過文件名列表perl成功。我想要做的是通過perl腳本將壓縮的tarball流式傳輸到他們的瀏覽器,但我不確定我會如何做到這一點。發送文件到瀏覽器進行下載

如果我運行一個系統命令tar文件的一大堆(它的名字是一個數組)我怎麼會「流」直接,以便用戶可以下載文件,而無需在本地存儲壓縮的壓縮包的壓縮包?

任何幫助,將不勝感激。謝謝。

編輯:所以我有perl流文件,但我如何處理它在Javascript結束。

Perl的呼叫正在取得這樣的:

$.ajax({ 
     type: "POST", 
     url: "/cgi-bin/download.pl", 
     data: info, 
     success: function(data){ 
      window.open(data,'Download'); 
      } 
    }); 

回答

2

使用管道。

運行沒有f參數的tar(即沒有文件,輸出爲突出顯示)。然後捕獲併發送輸出。您可以使用popen(),或者只是反引號:`。

+0

感謝。但是,我如何處理javascript中的perl腳本的回覆? Javascript通過ajax調用來調用perl函數。 – Falcata

+0

請勿使用ajax。只需將'document.location'添加到perl頁面。爲了在另一個答覆中回答你的問題,你把文件列表放在'document.location'的url中。例如:'document.location = download.perl?file1 = foo&file2 = bar'等。或者在url參數中使用一個數組。 '。.param()'可以幫助你解決這個問題。 – Ariel

+0

我得到了一切工作謝謝:)。但是還有一件事,一旦它完成了創建tarball,它只會讓用戶下載嗎?有沒有辦法管道下載壓縮和創建?當前: print「Content-Type:application/x-download \ n」; print「Content-Disposition:attachment; filename = download.tar.gz \ n \ n」; print'tar zc - $ path/$ file' – Falcata

1
+0

我正在做同樣的事情!但是,我怎麼把它交給JavaScript端呢? – Falcata

+1

不要使用AJAX,只需從頁面進行URL GET/POST調用即可。 MIME頭將自動打開下載對話框。 –

+0

如果我不使用ajax,那麼我不能傳入我需要下載的文件列表。 – Falcata