详解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创建基础应用并应用模板引擎
Apr 12 NodeJs
nodejs加密Crypto的实例代码
Jul 07 NodeJs
nodejs根据ip数组在百度地图中进行定位
Mar 06 NodeJs
NodeJS创建最简单的HTTP服务器
May 15 NodeJs
详解使用nodeJs安装Vue-cli
May 17 NodeJs
NodeJs使用Mysql模块实现事务处理实例
May 31 NodeJs
NodeJs form-data格式传输文件的方法
Dec 13 NodeJs
基于nodejs实现微信支付功能
Dec 20 NodeJs
Nodejs 和 Electron ubuntu下快速安装过程
May 04 NodeJs
nodejs 使用 js 模块的方法实例详解
Dec 04 NodeJs
Nodejs中怎么实现函数的串行执行
Mar 02 NodeJs
Nodejs实现WebSocket代码实例
May 19 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
PHP安装全攻略:APACHE
2006/10/09 PHP
解析phpstorm + xdebug 远程断点调试
2013/06/20 PHP
关于Zend Studio 配色方案插件的介绍
2013/06/24 PHP
php中array_unshift()修改数组key注意事项分析
2016/05/16 PHP
PHP类和对象相关系统函数与运算符小结
2016/09/28 PHP
php+ajax实现无刷新文件上传功能(ajaxuploadfile)
2018/02/11 PHP
Laravel5.1 框架控制器基础用法实例分析
2020/01/04 PHP
JS 文件传参及处理技巧分析
2010/05/13 Javascript
js open() 与showModalDialog()方法使用介绍
2013/09/10 Javascript
浅析jquery某一元素重复绑定的问题
2014/01/03 Javascript
jQuery/CSS3图片特效插件整理推荐
2014/12/07 Javascript
jQuery实现长按按钮触发事件的方法
2015/02/02 Javascript
Bootstrap 最常用的JS插件系列总结(图片轮播、标签切换等)
2016/07/14 Javascript
jQuery基于ajax操作json数据简单示例
2017/01/05 Javascript
Three.js如何实现雾化效果示例代码
2017/09/27 Javascript
jQuery实现的页面详情展开收起功能示例
2018/06/11 jQuery
AngularJs分页插件使用详解
2018/06/30 Javascript
JS实现自定义弹窗功能
2018/08/08 Javascript
详解在微信小程序的JS脚本中使用Promise来优化函数处理
2019/03/06 Javascript
javascript触发模拟鼠标点击事件
2019/06/26 Javascript
Python tempfile模块学习笔记(临时文件)
2014/05/25 Python
完美解决Python 2.7不能正常使用pip install的问题
2018/06/12 Python
python 实现图片旋转 上下左右 180度旋转的示例
2019/01/24 Python
Python如何实现邮件功能
2020/05/27 Python
如何使用python-opencv批量生成带噪点噪线的数字验证码
2020/12/21 Python
HTML5网页音乐播放器的示例代码
2017/11/09 HTML / CSS
新加坡一家在线男士皮具品牌:Faire Leather Co.
2019/12/01 全球购物
编辑求职信样本
2013/12/16 职场文书
纺织工程专业推荐信
2014/09/08 职场文书
2014镇党委班子对照检查材料思想汇报
2014/09/23 职场文书
2014年技术员工作总结
2014/11/18 职场文书
爱岗敬业事迹材料
2014/12/24 职场文书
思想品德评语大全
2014/12/31 职场文书
深度学习详解之初试机器学习
2021/04/14 Python
【海涛dota】偶遇拉娜娅 质量局德鲁伊第一视角解说
2022/04/01 DOTA
Java处理延时任务的常用几种解决方案
2022/06/01 Java/Android