2009-08-09 40 views
2

我想在用戶點擊一個鏈接後打開多個下載對話框。從一個鏈接下載多個文件

基本上我想要做的是允許用戶下載多個文件。我不想壓縮文件並提供一個壓縮文件,因爲這需要大量的服務器資源,因爲某些文件有些大。

我的猜測是,可能會有一些方式使用JavaScript,當用戶點擊某個鏈接,啓動多個請求。或者,也許在服務器端可能有辦法開始另一個請求。

+8

親愛的上帝,我希望我不是你的用戶之一! – 2009-08-09 20:24:11

+0

我無法確定,但現代瀏覽器似乎不太可能出現這種情況。另外,對用戶來說也有些困惑。 – spender 2009-08-09 20:24:39

+0

@rAyt我提出了壓縮文件解決方案,但客戶端似乎對使用服務器資源將文件壓縮在一起保持警惕。也許我會回覆一些基準來減輕他的恐懼。 – Darwyn 2009-08-09 22:53:11

回答

4

除非客戶端配置爲自動下載的文件,你不能沒有在單個響應打包文件做到這一點(比如你提到的ZIP解)。這將是一個安全問題,如果一個網站將能夠在你的磁盤上放置任意大量的文件而不告訴你。

順便說一句,你可能高估了包裝成本在一個文件中。流文件通常是I/O綁定操作。應該有足夠的CPU週期來通過一些存儲(tar)/壓縮(zip)方法來管理數據。

3

如果你絕對,肯定不能在服務器級別壓縮,這可能會是一個很好的實例創建某種自定義的「下載管理器」客戶端插件,你就必須在用戶安裝,然後你可以有完整在你有多少個文件下載的,他們去哪裏了,控制等

2

我想你可以鏈接到一個框架文件或包含iFrame的文檔。將每個文件的src設置爲您想要下載的文件之一。

也就是說,壓縮版本會更好。如果您擔心的負荷,那麼:

  • 壓縮與壓縮的文件設置爲none
  • 使用緩存在服務器上,所以你壓縮每個文件組只有一次
0
  1. 現一個帶有可供下載的可用文件複選框形式的頁面 - 爲複選框啓用多個選擇。
  2. 用戶選擇多個文件並提交表單。
  3. 服務器接受請求並使用串口觸發的文件下載javascript創建頁面。
  4. 將帶有嵌入式JavaScript的頁面呈現給用戶的瀏覽器,列出並要求確認要串行下載的文件。
  5. 用戶點擊[是 - 用這些文件連續淹沒我的硬盤]按鈕。
  6. foreach文件,完成下載的監聽器觸發下一次下載,直到列表結束。

我只知道如何使用谷歌GWT,我在那裏已經建立了GWT RPC瀏覽器和服務器之間要做到這一點。花了兩週時間來了解GWT RPC並完善了下載。現在看起來很簡單。

基本上(你知道基本上是極客社區中最常用的非技術詞之一嗎?),你必須聲明一個服務器服務類來指定數據類型/傳輸類。數據類型必須實現可序列化的地方。然後在瀏覽器端,GWT客戶端聲明一個相應的接收者類,指定相同的可序列化數據類型。瀏覽器端爲onSuccess和onFailure實現了一個監聽器。

嘿,我甚至設法增加GWT服務基類,以便我可以使用JSP而不是普通的servlet來實現服務接口。

實際上,我並沒有下載一系列文件,而是有條件地串行觸發下一個流的流,因爲我的onSuccess例程將檢查當前流以決定在下一個流上請求哪些內容。

好吧,兩週是一個暴動,我花了一個星期的時間去做。一個天才只需要半天。

0

我不明白這有什麼大不了的。爲什麼不是這樣的:

<a href="javascript:" id="myLink">Click me</a> 

<script type="text/javascript"> 
$('a#myLink').click(function() { 
    window.open('http://www.mysite.com/file1.pdf', 'file1'); 
    window.open('http://www.mysite.com/file2.pdf', 'file2'); 
    window.open('http://www.mysite.com/file3.pdf', 'file3'); 
}); 
</script>