【问题标题】:Download multiple files from NodeJS Server从 NodeJS 服务器下载多个文件
【发布时间】:2013-04-25 12:42:59
【问题描述】:

我正在尝试支持将多个文件从我的 Node js 服务器下载到客户端。通过在我的 NodeJS 服务器中实现以下逻辑,我可以支持将单个文件发送到客户端。

res.download('group_documents/sample1.pdf','sample1.pdf', function(err){
  if (err) {
    console.log(err);
  } else {
    // decrement a download credit etc
  }
});

如何重写上述服务器逻辑以支持使用来自客户端的单个请求(浏览器或 curl 请求)下载多个文件?

【问题讨论】:

  • 您正在谈论从 NodeJS 服务器(因此是浏览器)下载文件,然后开始显示 Express 代码(因此是服务器),最后是有关客户端(浏览器?或者是 Node现在的客户?)。请更正您的问题
  • 您的意思是您实际上希望多个文件出现在用户的下载文件夹中,还是您愿意下载 zip 文件或其他什么?一个请求中不可能有多个独立文件。
  • 我不明白为什么这被否决了,而没有任何澄清为什么它应该被否决。我面临同样的查询,并发现它是一个有效的查询。如果需要对问题进行任何改写,则应在不投反对票的情况下予以澄清。

标签: node.js


【解决方案1】:

在网络浏览器上,您不能一次下载多个文件。 但是您可以下载所有必需文件的存档文件。 使用 express-zip npm 包,您可以轻松完成。

https://github.com/thrackle/express-zip

安装 express-zip。

npm install express-zip

使用以下代码:

res.zip(files);

files 是一个对象数组。 每个对象应该是:

{ path : 'path/to/file', name : 'fileName'}

【讨论】:

    【解决方案2】:

    如果您的目标客户端是 Web 浏览器,那么您不能这样做,因为 http 协议不允许单个请求进行多次下载。

    如果您确实需要这样做,那么您需要编写一个自定义客户端应用程序,或者(更简单地)在传输文件之前将文件压缩到某个存档中。

    【讨论】:

    • HTTP 协议没有规定每个域的最大并发连接数,这是浏览器供应商提出的。
    • @RoelvanUden 我并不是真的指这个,更重要的是没有规定对单个请求进行多个响应。
    猜你喜欢
    • 2015-06-14
    • 2017-02-25
    • 2019-03-30
    • 2010-11-15
    • 2015-08-28
    • 2013-09-23
    • 2013-12-14
    相关资源
    最近更新 更多