我想在用户点击链接后打开多个下载对话框。
基本上我要做的是允许用户下载多个文件。我不想压缩文件并提供一个压缩文件,因为这需要大量的服务器资源,因为某些文件有些大。
我的猜测是,当用户点击某个链接时,javascript可能会有某种方式启动多个请求。或者也许服务器端可能有办法启动另一个请求。
答案 0 :(得分:4)
除非客户端配置为自动下载文件,否则如果不将文件打包在单个响应中(如您提到的ZIP解决方案),则无法实现此目的。如果网站能够放置,这将是一个安全问题磁盘上任意大量的文件而不告诉你。
顺便说一下,您可能会高估单个文件中的包装成本。流文件通常是一个I / O绑定操作。应该有足够的CPU周期来通过一些存储(tar)/压缩(zip)方法来管理数据。
答案 1 :(得分:3)
如果绝对,肯定不能在服务器级压缩,这可能是创建某种自定义“下载管理器”客户端插件的好例子,您可以让用户安装,然后您可以完全控制你下载了多少文件,他们去了哪里等等。
答案 2 :(得分:2)
我想你可以链接到框架集文档或包含iframe的文档。将每个的src设置为您要下载的文件之一。
那就是说,拉链版本会更好。如果你担心负载,那么:
答案 3 :(得分:0)
我只知道如何使用Google GWT执行此操作,我在浏览器和服务器之间设置了GWT RPC。花了两周的时间来了解GWT RPC并完善了下载。现在看起来很简单。
基本上(你知道基本是极客社区中最常用的非技术词之一吗?),你必须声明一个服务器服务类,指定数据类型/传输类。数据类型必须实现可序列化的位置。然后在浏览器端,GWT客户端声明一个相应的接收器类,指定相同的可序列化数据类型。浏览器端为onSuccess和onFailure实现了一个监听器。
嘿,我甚至设法扩充了GWT服务基类,这样我就可以使用JSP而不是普通的servlet来实现服务接口。
实际上,我没有下载一系列文件,而是有条件地串行触发下一个流的流,因为我的onSuccess例程会检查当前流以决定下一个流请求的内容。
好的,两个星期是一个夸张,我花了一个星期才做到这一点。一个天才只需要半天。
答案 4 :(得分: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>