详解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实现的一个简单udp广播服务器、客户端
Sep 25 NodeJs
Windows下使用Nodejs运行js的方法
Sep 02 NodeJs
nodejs 图片预览和上传的示例代码
Sep 30 NodeJs
使用nodeJs来安装less及编译less文件为css文件的方法
Nov 20 NodeJs
详解Nodejs内存治理
May 13 NodeJs
nodejs中用npm初始化来创建package.json的实例讲解
Oct 10 NodeJs
nodejs读取本地中文json文件出现乱码解决方法
Oct 10 NodeJs
NodeJS服务器实现gzip压缩的示例代码
Oct 12 NodeJs
NodeJS实现同步的方法
Mar 02 NodeJs
nodejs使用node-xlsx生成excel的方法示例
Aug 22 NodeJs
nodejs nedb 封装库与使用方法示例
Feb 06 NodeJs
浅谈使用nodejs搭建web服务器的过程
Jul 20 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代码优化之成员变量获取速度对比
2014/02/28 PHP
php中文字符串截取方法实例总结
2014/09/30 PHP
PHP中preg_match函数正则匹配的字符串长度问题
2015/05/27 PHP
php通过会话控制实现身份验证实例
2016/10/18 PHP
PHP实现的AES加密、解密封装类与用法示例
2018/08/02 PHP
使用javascript访问XML数据的实例
2006/12/27 Javascript
用JavaScript页面不刷新时全选择,全删除(GridView)
2009/04/14 Javascript
处理及遍历XML文档DOM元素属性及方法整理
2013/08/23 Javascript
js如何判断不同系统的浏览器类型
2013/10/28 Javascript
js实现DOM走马灯特效的方法
2015/01/21 Javascript
jQuery中DOM树操作之复制元素的方法
2015/01/23 Javascript
JavaScript中的方法重载实例
2015/03/16 Javascript
js完美解决IE6不支持position:fixed的bug
2015/04/24 Javascript
jQuery的css() 方法使用指南
2015/05/03 Javascript
JS实现仿新浪黄色经典滑动门效果代码
2015/09/27 Javascript
JS中setTimeout的巧妙用法前端函数节流
2016/03/24 Javascript
javascript RegExp 使用说明
2016/05/21 Javascript
浅谈javascript中的加减时间
2016/07/12 Javascript
canvas快速绘制圆形、三角形、矩形、多边形方法介绍
2016/12/29 Javascript
node.js连接mysql与基本用法示例
2019/01/05 Javascript
HTML+JavaScript实现扫雷小游戏
2019/09/30 Javascript
Vue3 源码导读(推荐)
2019/10/14 Javascript
[54:30]Liquid vs Newbee 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
详解Python的Django框架中的Cookie相关处理
2015/07/22 Python
Python正则抓取网易新闻的方法示例
2017/04/21 Python
JPype实现在python中调用JAVA的实例
2017/07/19 Python
python itchat实现微信自动回复的示例代码
2017/08/14 Python
解决Python print 输出文本显示 gbk 编码错误问题
2018/07/13 Python
关于ZeroMQ 三种模式python3实现方式
2019/12/23 Python
python如何调用百度识图api
2020/09/29 Python
机械系毕业生求职信
2014/05/28 职场文书
离婚答辩状范文
2015/05/22 职场文书
2016年度创先争优活动总结
2016/04/05 职场文书
诚信高考倡议书
2019/06/24 职场文书
详解MySQL 联合查询优化机制
2021/05/10 MySQL
Python内置数据结构列表与元组示例详解
2021/08/04 Python