详解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的Promise的用法解析
May 05 NodeJs
Nodejs进阶:基于express+multer的文件上传实例
Nov 21 NodeJs
浅谈Nodejs中的作用域问题
Dec 26 NodeJs
nodejs入门教程五:连接数据库的方法分析
Apr 24 NodeJs
Nodejs回调加超时限制两种实现方法
Jun 09 NodeJs
NodeJS 实现手机短信验证模块阿里大于功能
Jun 19 NodeJs
Express+Nodejs 下的登录拦截实现代码
Jul 01 NodeJs
Windows下快速搭建NodeJS本地服务器的步骤
Aug 09 NodeJs
详解使用vscode+es6写nodejs服务端调试配置
Sep 21 NodeJs
nodejs简单实现TCP服务器端和客户端的聊天功能示例
Jan 04 NodeJs
监控Nodejs的性能实例代码
Jul 02 NodeJs
NodeJs crypto加密制作token的实现代码
Nov 15 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加密解密的代码
2006/10/09 PHP
PHP array_flip() 删除重复数组元素专用函数
2010/05/16 PHP
PHP以及MYSQL日期比较方法
2012/11/29 PHP
php过滤XSS攻击的函数
2013/11/12 PHP
PHP安全的URL字符串base64编码和解码
2014/06/19 PHP
PHP SPL标准库之数据结构堆(SplHeap)简单使用实例
2015/05/12 PHP
php检查页面是否被百度收录
2015/10/28 PHP
使用laravel的Eloquent模型如何获取数据库的指定列
2019/10/17 PHP
某人初学javascript的时候写的学习笔记
2010/12/30 Javascript
JavaScript 作用域链解析
2014/11/13 Javascript
jquery图片切换插件
2015/03/16 Javascript
JavaScript实现标题栏文字轮播效果代码
2015/10/24 Javascript
AngularJs  Using $location详解及示例代码
2016/09/02 Javascript
Vue.js实现无限加载与分页功能开发
2016/11/03 Javascript
详解vue-cli与webpack结合如何处理静态资源
2017/09/19 Javascript
webpack-dev-server远程访问配置方法
2018/02/22 Javascript
vue-router history模式下的微信分享小结
2018/07/05 Javascript
详解vue微信网页授权最终解决方案
2019/06/16 Javascript
layer扩展打开/关闭动画的方法
2019/09/23 Javascript
Vue路由守卫之路由独享守卫
2019/09/25 Javascript
JavaScript接口实现方法实例分析
2020/05/16 Javascript
从局部变量和全局变量开始全面解析Python中变量的作用域
2016/06/16 Python
Python并行分布式框架Celery详解
2018/10/15 Python
Django 实现将图片转为Base64,然后使用json传输
2020/03/27 Python
简单了解Python变量作用域正确使用方法
2020/06/12 Python
python中逻辑与或(and、or)和按位与或异或(&amp;、|、^)区别
2020/08/05 Python
css3 图片圆形显示 如何CSS将正方形图片显示为圆形图片布局
2014/10/10 HTML / CSS
英国版MAC彩妆品牌:Illamasqua
2018/04/18 全球购物
亚马逊海外购:亚马逊美国、英国、日本、德国直邮
2021/03/18 全球购物
如何整合JQuery和Prototype
2014/01/31 面试题
新品发布会策划方案
2014/06/08 职场文书
机电一体化毕业生自荐信
2014/06/19 职场文书
教你怎么用python selenium实现自动化测试
2021/05/27 Python
Python还能这么玩之用Python修改了班花的开机密码
2021/06/04 Python
利用python调用摄像头的实例分析
2021/06/07 Python
Java生成日期时间存入Mysql数据库的实现方法
2022/03/03 Java/Android