详解Nodejs 通过 fs.createWriteStream 保存文件


Posted in NodeJs onOctober 10, 2017

工作中难免会遇到处理大文件的时候,有这种stream的处理方式,就不需要一次处理太大的文件,从而导致内存不够用,或者内存占用太多。

fs.createWriteStream 似乎不会自己创建不存在的文件夹,所以在使用之前需要注意,保存文件的文件夹一定要提前创建。

const path = '/xxxxxx/ddd/';

if (!fs.existsSync(path)) {
 fs.mkdirSync(path);
}

创建完文件夹,我们就可以进行文件添加操作了。我们希望在使用文件添加操作的时候是通过saveFile(filePath, fileData);这样的方式来调用。

这里我采用了Promise的方式,个人比较喜欢这样的方式

/**
  * [saveFileWithStream description]
  * @param {String} filePath [文件路径]
  * @param {Buffer} readData [Buffer 数据]
  */
 static saveFile(filePath, fileData) {
  return new Promise((resolve, reject) => {
   // 块方式写入文件
   const wstream = fs.createWriteStream(filePath);

   wstream.on('open', () => {
    const blockSize = 128;
    const nbBlocks = Math.ceil(fileData.length / (blockSize));
    for (let i = 0; i < nbBlocks; i += 1) {
     const currentBlock = fileData.slice(
      blockSize * i,
      Math.min(blockSize * (i + 1), fileData.length),
     );
     wstream.write(currentBlock);
    }

    wstream.end();
   });
   wstream.on('error', (err) => { reject(err); });
   wstream.on('finish', () => { resolve(true); });
  });
 }

实际调用的时候,如下

try {
 await saveFileWithStream(filePath, fileData); // 这里的fileData是Buffer类型
} catch (err) {
 console.log(err.stack);
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

NodeJs 相关文章推荐
NodeJS 模块开发及发布详解分享
Mar 07 NodeJs
跟我学Nodejs(一)--- Node.js简介及安装开发环境
May 20 NodeJs
Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例
Jan 01 NodeJs
nodejs简单实现中英文翻译
May 04 NodeJs
nodejs的HTML分析利器node-jquery用法浅析
Nov 08 NodeJs
Nodejs进阶:基于express+multer的文件上传实例
Nov 21 NodeJs
详解Nodejs基于mongoose模块的增删改查的操作
Dec 21 NodeJs
nodejs学习笔记之路由
Mar 27 NodeJs
NodeJS爬虫实例之糗事百科
Dec 14 NodeJs
nodeJS微信分享
Dec 20 NodeJs
nodejs中密码加密处理操作详解
Mar 20 NodeJs
nodejs aes 加解密实例
Oct 10 NodeJs
NodeJs通过async/await处理异步的方法
Oct 09 #NodeJs
nodejs 图片预览和上传的示例代码
Sep 30 #NodeJs
Nodejs调用WebService的示例代码
Sep 29 #NodeJs
Nodejs+angularjs结合multiparty实现多图片上传的示例代码
Sep 29 #NodeJs
Nodejs实现文件上传的示例代码
Sep 26 #NodeJs
详解nodejs通过代理(proxy)发送http请求(request)
Sep 22 #NodeJs
使用vs code开发Nodejs程序的使用方法
Sep 21 #NodeJs
You might like
对盗链说再见...
2006/10/09 PHP
基于swoole实现多人聊天室
2018/06/14 PHP
JS的IE和Firefox兼容性集锦
2006/12/11 Javascript
如何用javascript去掉字符串里的所有空格
2007/02/08 Javascript
鼠标滑上去后图片放大浮出效果的js代码
2011/05/28 Javascript
简单的两种Extjs formpanel加载数据的方式
2013/11/09 Javascript
浅谈jQuery异步对象(XMLHttpRequest)
2014/11/17 Javascript
JS+CSS实现仿雅虎另类滑动门切换效果
2015/10/13 Javascript
js实现跨域的多种方法
2015/12/25 Javascript
JS小数运算出现多为小数问题的解决方法
2016/06/02 Javascript
BootStrap Table 设置height表头与内容无法对齐的问题
2016/12/28 Javascript
vue2笔记 — vue-router路由懒加载的实现
2017/03/03 Javascript
vue动态组件实现选项卡切换效果
2017/03/08 Javascript
vue动态路由实现多级嵌套面包屑的思路与方法
2017/08/16 Javascript
Js中async/await的执行顺序详解
2017/09/22 Javascript
javascript设计模式 ? 抽象工厂模式原理与应用实例分析
2020/04/09 Javascript
JavaScript或jQuery 获取option value值方法解析
2020/05/12 jQuery
微信小程序canvas实现签名功能
2021/01/19 Javascript
[34:56]Ti4冒泡赛LGD vs Liquid 1
2014/07/14 DOTA
Python实现把回车符\r\n转换成\n
2015/04/23 Python
浅析Python中的多重继承
2015/04/28 Python
python实现将内容分行输出
2015/11/05 Python
利用Python将时间或时间间隔转为ISO 8601格式方法示例
2017/09/05 Python
Windows下的Jupyter Notebook 安装与自定义启动(图文详解)
2018/02/21 Python
wxpython绘制音频效果
2019/11/18 Python
python3实现往mysql中插入datetime类型的数据
2020/03/02 Python
中粮集团旗下食品网上购物网站:我买网
2016/09/22 全球购物
戴森比利时官方网站:Dyson BE
2020/10/03 全球购物
关于Assembly命名空间的三个面试题
2015/07/23 面试题
应届毕业生自我鉴定范文
2013/12/27 职场文书
考试退步检讨书
2014/01/15 职场文书
基层党建工作汇报材料
2014/08/15 职场文书
考试作弊检讨书
2015/01/27 职场文书
小学英语教师研修感悟
2015/11/18 职场文书
TV动画《政宗君的复仇》第二季制作决定PV公布
2022/04/02 日漫
MySQL 自动填充 create_time 和 update_time
2022/05/20 MySQL