从一个链接下载多个文件

时间:2009-08-09 20:21:42

标签: c# asp.net javascript http

我想在用户点击链接后打开多个下载对话框。

基本上我要做的是允许用户下载多个文件。我不想压缩文件并提供一个压缩文件,因为这需要大量的服务器资源,因为某些文件有些大。

我的猜测是,当用户点击某个链接时,javascript可能会有某种方式启动多个请求。或者也许服务器端可能有办法启动另一个请求。

5 个答案:

答案 0 :(得分:4)

除非客户端配置为自动下载文件,否则如果不将文件打包在单个响应中(如您提到的ZIP解决方案),则无法实现此目的。如果网站能够放置,这将是一个安全问题磁盘上任意大量的文件而不告诉你。

顺便说一下,您可能会高估单个文件中的包装成本。流文件通常是一个I / O绑定操作。应该有足够的CPU周期来通过一些存储(tar)/压缩(zip)方法来管理数据。

答案 1 :(得分:3)

如果绝对,肯定不能在服务器级压缩,这可能是创建某种自定义“下载管理器”客户端插件的好例子,您可以让用户安装,然后您可以完全控制你下载了多少文件,他们去了哪里等等。

答案 2 :(得分:2)

我想你可以链接到框架集文档或包含iframe的文档。将每个的src设置为您要下载的文件之一。

那就是说,拉链版本会更好。如果你担心负载,那么:

  • 将压缩设置为无
  • 的文件压缩
  • 在服务器上使用缓存,因此只需将每组文件压缩一次

答案 3 :(得分:0)

  1. 显示一个页面,其中包含可供下载的可用文件的复选框形式 - 复选框启用了多个选择。
  2. 用户选择多个文件并提交表单。
  3. 服务器接受请求并创建一个包含串行触发文件下载javascript的页面。
  4. 带有嵌入式javascript的页面会显示给用户的浏览器,列出并要求确认要连续下载的文件。
  5. 用户点击[是 - 用这些文件连续淹没我的硬盘]按钮。
  6. foreach文件,下载完成的监听器触发下一次下载,直到列表结束。
  7. 我只知道如何使用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>