2009-08-09 73 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>