代码之家  ›  专栏  ›  技术社区  ›  Darwyn

从一个链接下载多个文件

  •  2
  • Darwyn  · 技术社区  · 15 年前

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

    本质上,我想做的是允许用户下载多个文件。我不想压缩文件并传递一个压缩文件,因为考虑到某些文件的大小,这需要大量的服务器资源。

    我的猜测是,当用户单击某个链接时,JavaScript可能有某种方法可以启动多个请求。或者可能在服务器端有一种方法来启动另一个请求。

    5 回复  |  直到 12 年前
        1
  •  4
  •   Mehrdad Afshari    15 年前

    除非将客户机配置为自动下载文件,否则如果不将文件打包到单个响应中(如您提到的zip解决方案),就无法完成此操作。如果网站能够在不通知您的情况下将任意数量的文件放在磁盘上,这将是一个安全问题。

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

        2
  •  3
  •   MattC    15 年前

    如果您绝对不能在服务器级别进行压缩,这可能是创建某种自定义“下载管理器”客户端插件的一个很好的例子,您可以让用户安装这些插件,然后您就可以完全控制下载的文件数、文件的位置等。

        3
  •  2
  •   Quentin    15 年前

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

    也就是说,压缩版会更好。如果您关心负载,则:

    • 压缩设置为“无”时压缩文件
    • 在服务器上使用缓存,因此您只对每组文件进行一次压缩
        4
  •  0
  •   Blessed Geek    15 年前
    1. 显示一个页面,其中包含可供下载的文件的复选框格式-为复选框启用了多个选择。
    2. 用户选择多个文件并提交表单。
    3. 服务器接受请求并创建带有串行触发文件下载javascript的页面。
    4. 嵌入javascript的页面将显示给用户的浏览器,列出并请求确认要连续下载的文件。
    5. 用户单击[是-用这些文件连续淹没我的硬盘]按钮。
    6. 对于每个文件,用于下载的侦听器都会触发下一次下载,直到列表结束。

    我只知道如何使用GoogleGWT来实现这一点,我在浏览器和服务器之间设置了GWTRPC。我花了两周时间来理解GWTRPC并完善下载。现在看起来相当简单。

    基本上(你知道吗 基本上 是极客社区中最常用的非技术词汇之一吗?),您必须声明一个指定传输数据类型/类的服务器服务类。其中数据类型必须实现可序列化。然后在浏览器端,GWT客户机声明一个对应的接收器类,指定相同的可序列化数据类型。浏览器端实现onsuccess和onfailure的侦听器。

    嘿,我甚至设法扩充了GWT服务基类,这样我就可以使用JSP而不是普通的servlet来实现服务接口。

    实际上,我下载的不是一系列文件,而是有条件地连续触发下一个流的流,因为onSuccess例程将检查当前流,以决定在下一个流上请求什么内容。

    好吧,两个星期真让人恼火,我花了一个星期才做完。天才只需要半天时间。

        5
  •  0
  •   cbp    12 年前

    我不知道这有什么大不了的。为什么不这样:

    <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>