详解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 相关文章推荐
基于 Docker 开发 NodeJS 应用
Jul 30 NodeJs
Nodejs中读取中文文件编码问题、发送邮件和定时任务实例
Jan 01 NodeJs
Nodejs从有门道无门菜鸟起飞必看教程
Jul 20 NodeJs
nodejs如何获取时间戳与时间差
Aug 03 NodeJs
nodejs微信公众号支付开发
Sep 19 NodeJs
NodeJs下的测试框架Mocha的简单介绍
Feb 22 NodeJs
nodejs+websocket实时聊天系统改进版
May 18 NodeJs
NodeJS实现视频转码的示例代码
Nov 18 NodeJs
Nodejs下使用gm圆形裁剪并合成图片的示例
Feb 22 NodeJs
nodejs搭建本地服务器轻松解决跨域问题
Mar 21 NodeJs
NodeJs搭建本地服务器之使用手机访问的实例讲解
May 12 NodeJs
NodeJS服务器实现gzip压缩的示例代码
Oct 12 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 Javascript
PHP中new static()与new self()的区别异同分析
2014/08/22 PHP
php使用ereg验证文件上传的方法
2014/12/16 PHP
Yii框架小部件(Widgets)用法实例详解
2020/05/15 PHP
IE中直接运行显示当前网页中的图片 推荐
2006/08/31 Javascript
IE6浏览器下resize事件被执行了多次解决方法
2012/12/11 Javascript
jquery ready(fn)事件使用介绍
2013/08/21 Javascript
JS/Jquery判断对象为空的方法
2015/06/11 Javascript
详解JavaScript中Date.UTC()方法的使用
2015/06/12 Javascript
JS基于cookie实现来宾统计记录访客信息的方法
2015/08/04 Javascript
JavaScript程序中实现继承特性的方式总结
2016/06/24 Javascript
Vue.js实现简单动态数据处理
2017/02/13 Javascript
angular中的http拦截器Interceptors的实现
2017/02/21 Javascript
vue.js利用Object.defineProperty实现双向绑定
2017/03/09 Javascript
javascript高仿热血传奇游戏实现代码
2018/02/22 Javascript
解决vue 格式化银行卡(信用卡)每4位一个符号隔断的问题
2018/09/14 Javascript
使用Angular自定义字段校验指令的方法示例
2019/02/01 Javascript
微信小程序学习笔记之登录API与获取用户信息操作图文详解
2019/03/29 Javascript
微信小程序实现多选框全选与取消全选功能示例
2019/05/14 Javascript
Node.js fs模块原理及常见用途
2020/10/22 Javascript
ant design的table组件实现全选功能以及自定义分页
2020/11/17 Javascript
[01:07:13]TNC vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
python提取字典key列表的方法
2015/07/11 Python
Python实现将Excel转换为json的方法示例
2017/08/05 Python
python 遍历目录(包括子目录)下所有文件的实例
2018/07/11 Python
Keras Convolution1D与Convolution2D区别说明
2020/05/22 Python
python实现定时发送邮件
2020/12/23 Python
上海奥佳笔试题面试题
2016/11/16 面试题
房地产财务部员工岗位职责
2014/03/12 职场文书
骨干教师培训方案
2014/05/06 职场文书
工作说明书范文
2014/05/07 职场文书
企业员工集体活动方案
2014/08/17 职场文书
爱护公共设施演讲稿
2014/09/13 职场文书
2014年社区卫生工作总结
2014/12/18 职场文书
2019年教师节活动策划方案
2019/09/09 职场文书
python之np.argmax()及对axis=0或者1的理解
2021/06/02 Python