详解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的10个性能优化技巧
Jul 15 NodeJs
Nodejs学习笔记之Stream模块
Jan 13 NodeJs
nodejs实现bigpipe异步加载页面方案
Jan 26 NodeJs
Nodejs中解决cluster模块的多进程如何共享数据问题
Nov 10 NodeJs
nodejs基础知识
Feb 03 NodeJs
nodejs读写json文件的简单方法(必看)
Mar 09 NodeJs
nodejs基于WS模块实现WebSocket聊天功能的方法
Jan 12 NodeJs
Nodejs实现多文件夹文件同步
Oct 17 NodeJs
NodeJS实现同步的方法
Mar 02 NodeJs
关于NodeJS中的循环引用详解
Jul 23 NodeJs
通过实例了解Nodejs模块系统及require机制
Jul 16 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数据库抽象层 PDO
2011/05/07 PHP
PHP 命令行工具 shell_exec, exec, passthru, system详细使用介绍
2011/09/11 PHP
php获取url参数方法总结
2014/11/13 PHP
js的逻辑运算符 ||
2010/05/31 Javascript
JS求平均值的小例子
2013/11/29 Javascript
js完美的div拖拽实例代码
2014/01/22 Javascript
父页面显示遮罩层弹出半透明状态的dialog
2014/03/04 Javascript
js实现键盘上下左右键选择文字并显示在文本框的方法
2015/05/07 Javascript
JavaScript对HTML DOM使用EventListener进行操作
2015/10/21 Javascript
基于JavaScript怎么实现让歌词滚动播放
2015/11/03 Javascript
jQuery遮罩层效果实例分析
2016/01/14 Javascript
Angularjs 实现分页功能及示例代码
2016/09/14 Javascript
vue+iview写个弹框的示例代码
2017/12/05 Javascript
微信小程序实现图片懒加载的示例代码
2017/12/13 Javascript
webstorm中配置Eslint的两种方式及差异比较详解
2018/10/19 Javascript
基于layui实现高级搜索(筛选)功能
2019/07/26 Javascript
NodeJS http模块用法示例【创建web服务器/客户端】
2019/11/05 NodeJs
使用JavaScript计算前一天和后一天的思路详解
2019/12/20 Javascript
关于Node.js中频繁修改代码重启服务器的问题
2020/10/15 Javascript
python去除所有html标签的方法
2015/05/05 Python
在Django框架中编写Context处理器的方法
2015/07/20 Python
Python退火算法在高次方程的应用
2018/07/26 Python
windows下python 3.6.4安装配置图文教程
2018/08/21 Python
对sklearn的使用之数据集的拆分与训练详解(python3.6)
2018/12/14 Python
深入理解Django-Signals信号量
2019/02/19 Python
python2 中 unicode 和 str 之间的转换及与python3 str 的区别
2019/07/25 Python
详解Matplotlib绘图之属性设置
2019/08/23 Python
Python代码生成视频的缩略图的实例讲解
2019/12/22 Python
Europcar英国:英国汽车和货车租赁
2017/01/21 全球购物
EJB3.1都有哪些改进
2012/11/17 面试题
大学生的自我鉴定范文
2014/01/21 职场文书
小学学雷锋活动总结
2014/04/25 职场文书
公司离职证明标准范本
2014/10/05 职场文书
银行授权委托书样本
2014/10/13 职场文书
放飞理想主题班会
2015/08/14 职场文书
MySQL REVOKE实现删除用户权限
2021/06/18 MySQL