0

0

Node批量下载文件到本地的方法介绍(附代码)

不言

不言

发布时间:2019-03-16 10:51:01

|

4794人浏览过

|

来源于segmentfault

转载

本篇文章给大家带来的内容是关于node批量下载文件到本地的方法介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

多文件分别处理

如果文件数量可控,对于下载出来的文件格式无要求,可以用最简单的办法,直接遍历文件,分别给每个下载链接创建一个单文件的download或者iframe下载链接。

zip包批量下载

虽然说可以遍历所有文件,然后去批量下载单个文件,但是这种体验毕竟不太好,最常见的做法是把批量的文件下载并打包到zip中。

所以首先的一个实现思路是:在代理服务里,先去遍历所有的文件去请求文件数据,然后压缩到zip包中,然后再把zip包返回给客户端。

doxygen 官方手册
doxygen 官方手册

doxygen是一款好用的程序员辅助工具,它可以让程序添加批添代码更加简单轻松,兼容C++、 C、Java、 Objective-C、Python等主流编程语言,小编提供的doxygen中文手册包含了基本介绍、语法技巧以及进阶技巧等内容,可以让你快速上手操作,有需要的欢迎下载。 基本介绍 Doxygen已经支持生成ANSI编码的chm目录文件(index.hhc)!Doxygen通常是用作生成英文文档的,生成中文文档需要修改输入和输出的码制,这样可以改变解析方式,生成中文文档。但是,你必须意识 到,Dox

下载

这么做对于下载量数据比较小时ok,但是如果批量文件特别多特别大时,用户要等后台把所有的数据都请求到并且都打包都压缩包里,前端才能有反馈,这个时间可能会耗时很长,用户体验可能很差。

在同事的前期调研时,有说这里可以做一个流式的边压缩边下载的能力,大致的思路是,chunk回包,加流式压缩。

......

let fileCounter = 0;
const zippedFilename = encodeURIComponent(downloadData.name);
const list = downloadData.list || [];
const header = {
  'Content-Type': 'application/x-zip',
  'Pragma': 'public',
  'Expires': '0',
  'Cache-Control': 'private, must-revalidate, post-check=0, pre-check=0',
  'Content-disposition': 'attachment; filename="' + zippedFilename + '"',
  'Transfer-Encoding': 'chunked',
  'Content-Transfer-Encoding': 'binary'
};
res.writeHead(200, header);
archive.store = true;
archive.pipe(res);
list.map(item => {
  fileCounter++;
  let inStream = request.get(item.downLoadUrl);
  let name = item.fileName;
  let length = 0;
  inStream.on('response', function(awsData) {
    archive.append(inStream, {
      name: name
    });
  }).on('data', function(data) {
    length += data.length;
  }).on('error', function(e) {
    console.error(name + '-error', e);
  }).on('end', function(endData) {
    fileCounter--;
    if (fileCounter < 1) {
      archive.finalize();
    }
  });
});
archive.on('error', function(err) {
  throw err;
});
archive.on('finish', function(err) {
  return res.end();
});

......

当然中间还有些细节需要处理:比如中文文件名的问题,是否需要下载文件总大小做限制,是否会出现文件不存在等等情况。

相关专题

更多
c++ 根号
c++ 根号

本专题整合了c++根号相关教程,阅读专题下面的文章了解更多详细内容。

22

2026.01.23

c++空格相关教程合集
c++空格相关教程合集

本专题整合了c++空格相关教程,阅读专题下面的文章了解更多详细内容。

24

2026.01.23

yy漫画官方登录入口地址合集
yy漫画官方登录入口地址合集

本专题整合了yy漫画入口相关合集,阅读专题下面的文章了解更多详细内容。

99

2026.01.23

漫蛙最新入口地址汇总2026
漫蛙最新入口地址汇总2026

本专题整合了漫蛙最新入口地址大全,阅读专题下面的文章了解更多详细内容。

132

2026.01.23

C++ 高级模板编程与元编程
C++ 高级模板编程与元编程

本专题深入讲解 C++ 中的高级模板编程与元编程技术,涵盖模板特化、SFINAE、模板递归、类型萃取、编译时常量与计算、C++17 的折叠表达式与变长模板参数等。通过多个实际示例,帮助开发者掌握 如何利用 C++ 模板机制编写高效、可扩展的通用代码,并提升代码的灵活性与性能。

15

2026.01.23

php远程文件教程合集
php远程文件教程合集

本专题整合了php远程文件相关教程,阅读专题下面的文章了解更多详细内容。

65

2026.01.22

PHP后端开发相关内容汇总
PHP后端开发相关内容汇总

本专题整合了PHP后端开发相关内容,阅读专题下面的文章了解更多详细内容。

61

2026.01.22

php会话教程合集
php会话教程合集

本专题整合了php会话教程相关合集,阅读专题下面的文章了解更多详细内容。

63

2026.01.22

宝塔PHP8.4相关教程汇总
宝塔PHP8.4相关教程汇总

本专题整合了宝塔PHP8.4相关教程,阅读专题下面的文章了解更多详细内容。

33

2026.01.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
NumPy 教程
NumPy 教程

共44课时 | 3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 809人学习

好课诞生记
好课诞生记

共20课时 | 6.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号