详解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的模块写法入门(实例代码)
Mar 07 NodeJs
使用forever管理nodejs应用教程
Jun 03 NodeJs
如何正确使用Nodejs 的 c++ module 链接到 OpenSSL
Aug 03 NodeJs
Nodejs+express+html5 实现拖拽上传
Aug 08 NodeJs
nodejs通过phantomjs实现下载网页
May 04 NodeJs
快速掌握Node.js之Window下配置NodeJs环境
Mar 21 NodeJs
用NodeJS实现批量查询地理位置的经纬度接口
Aug 16 NodeJs
NodeJS实现客户端js加密
Jan 09 NodeJs
nodejs个人博客开发第三步 载入页面
Apr 12 NodeJs
nodejs文件夹深层复制功能
Sep 03 NodeJs
nodejs的安装使用与npm的介绍
Sep 11 NodeJs
在NodeJs中使用node-schedule增加定时器任务的方法
Jun 08 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错误信息方法的详解
2013/06/09 PHP
PHP中exec函数和shell_exec函数的区别
2014/08/20 PHP
php使用指定编码导出mysql数据到csv文件的方法
2015/03/31 PHP
PHP实现将textarea的值根据回车换行拆分至数组
2015/06/10 PHP
php+MySql实现登录系统与输出浏览者信息功能
2016/07/01 PHP
JavaScript 组件之旅(三):用 Ant 构建组件
2009/10/28 Javascript
js 格式化时间日期函数小结
2010/03/20 Javascript
js传中文参数controller里获取参数乱码问题解决方法
2014/01/03 Javascript
jquery原创弹出层折叠效果点击折叠弹出一个层
2014/03/12 Javascript
JavaScript动态添加css样式和script标签
2016/07/19 Javascript
使用JS实现图片展示瀑布流效果(简单实例)
2016/09/06 Javascript
JS实现简易的图片拖拽排序实例代码
2017/06/09 Javascript
推荐VSCode 上特别好用的 Vue 插件之vetur
2017/09/14 Javascript
深入理解ES6之数据解构的用法
2018/01/13 Javascript
JS中用EL表达式获取上下文参数值的方法
2018/03/28 Javascript
vue自定义tap指令及tap事件的实现
2018/09/18 Javascript
详解Vue 全局变量,局部变量
2019/04/17 Javascript
解决vue的过渡动画无法正常实现问题
2019/10/31 Javascript
[00:33]DOTA2上海特级锦标赛 CDEC战队宣传片
2016/03/04 DOTA
Python中os.path用法分析
2015/01/15 Python
python开启多个子进程并行运行的方法
2015/04/18 Python
Python的Django框架中使用SQLAlchemy操作数据库的教程
2016/06/02 Python
python正则表达式及使用正则表达式的例子
2018/01/22 Python
python 实现图片旋转 上下左右 180度旋转的示例
2019/01/24 Python
Python+AutoIt实现界面工具开发过程详解
2019/08/07 Python
Python closure闭包解释及其注意点详解
2019/08/28 Python
python脚本调用iftop 统计业务应用流量的思路详解
2019/10/11 Python
python实现图片转字符画
2021/02/19 Python
HTML5中FileReader接口使用方法实例详解
2017/08/26 HTML / CSS
介绍一下MD5加密算法
2016/11/12 面试题
公司自我介绍演讲稿
2014/08/21 职场文书
工伤私了协议书范本
2014/11/24 职场文书
主持人开幕词
2015/01/29 职场文书
js实现自动锁屏功能
2021/06/02 Javascript
Spring Cloud 中@FeignClient注解中的contextId属性详解
2021/09/25 Java/Android
tomcat正常启动但网页却无法访问的几种解决方法
2022/05/06 Servers