详解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 sublime text 3安装与配置
Jun 19 NodeJs
基于promise.js实现nodejs的promises库
Jul 06 NodeJs
实例详解Nodejs 保存 payload 发送过来的文件
Jan 14 NodeJs
nodejs微信公众号支付开发
Sep 19 NodeJs
NodeJS基础API搭建服务器详细过程记录
Apr 01 NodeJs
nodeJS实现简单网页爬虫功能的实例(分享)
Jun 08 NodeJs
nodejs密码加密中生成随机数的实例代码
Jul 17 NodeJs
浅谈NodeJs之数据库异常处理
Oct 25 NodeJs
nodejs判断文件、文件夹是否存在及删除的方法
Nov 10 NodeJs
nodejs+mongodb+vue前后台配置ueditor的示例代码
Jan 02 NodeJs
详解nodeJs文件系统(fs)与流(stream)
Jan 24 NodeJs
Nodejs监控事件循环异常示例详解
Sep 22 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
Zend 输出产生XML解析错误
2009/03/03 PHP
探讨file_get_contents与curl效率及稳定性的分析
2013/06/06 PHP
php设置session值和cookies的学习示例
2014/03/21 PHP
php计算一个文件大小的方法
2015/03/30 PHP
微信支付开发动态链接Native支付
2016/07/12 PHP
PHP 中 DOMDocument保存xml时中文出现乱码问题的解决方案
2016/09/19 PHP
阿里云的WindowsServer2016上部署php+apache
2018/07/17 PHP
原生javascript获取元素样式
2014/12/31 Javascript
详解AngularJS中的表达式使用
2015/06/16 Javascript
实现音乐播放器的代码(html5+css3+jquery)
2015/08/04 Javascript
jQuery选择器及jquery案例详解(必看)
2016/05/20 Javascript
Vue自定义指令拖拽功能示例
2017/02/17 Javascript
vue使用localStorage保存登录信息 适用于移动端、PC端
2019/05/27 Javascript
js+canvas实现两张图片合并成一张图片的方法
2019/11/01 Javascript
[02:39]DOTA2国际邀请赛助威团西雅图第一天
2013/08/08 DOTA
Python实现类继承实例
2014/07/04 Python
python获取局域网占带宽最大3个ip的方法
2015/07/09 Python
sublime text 3配置使用python操作方法
2017/06/11 Python
Python实现的下载网页源码功能示例
2017/06/13 Python
python实现拓扑排序的基本教程
2018/03/11 Python
对pandas中iloc,loc取数据差别及按条件取值的方法详解
2018/11/06 Python
一篇文章搞懂Python的类与对象名称空间
2018/12/10 Python
python3.6下Numpy库下载与安装图文教程
2019/04/02 Python
Python对列表的操作知识点详解
2019/08/20 Python
pytorch GAN生成对抗网络实例
2020/01/10 Python
tensorflow之tf.record实现存浮点数数组
2020/02/17 Python
使用keras2.0 将Merge层改为函数式
2020/05/23 Python
财务分析个人的自荐书范文
2013/11/24 职场文书
毕业生求职找工作的自我评价范文
2013/11/27 职场文书
计算机应用专业毕业生求职信
2014/06/03 职场文书
员工生日会策划方案
2014/06/14 职场文书
干部个人对照检查材料
2014/08/25 职场文书
2014社区健康教育工作总结
2014/12/16 职场文书
埃及王子观后感
2015/06/16 职场文书
2016党校培训心得体会
2016/01/07 职场文书
tensorflow中的数据类型dtype用法说明
2021/05/26 Python