详解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实现黑名单中间件设计
Jun 17 NodeJs
nodejs教程之环境安装及运行
Nov 21 NodeJs
Nodejs学习笔记之NET模块
Jan 13 NodeJs
NodeJS中利用Promise来封装异步函数
Feb 25 NodeJs
nodejs中的fiber(纤程)库详解
Mar 24 NodeJs
Nodejs的express使用教程
Nov 23 NodeJs
nodeJs链接Mysql做增删改查的简单操作
Feb 04 NodeJs
nodejs中使用HTTP分块响应和定时器示例代码
Mar 19 NodeJs
CentOS 安装NodeJS V8.0.0的方法
Jun 15 NodeJs
Nodejs 复制文件/文件夹的方法
Aug 24 NodeJs
NodeJS实现不可逆加密与密码密文保存的方法
Mar 16 NodeJs
NodeJS实现同步的方法
Mar 02 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 file_exists 检查文件或目录是否存在的函数
2010/05/10 PHP
PHP计算2点经纬度之间的距离代码
2013/08/12 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
2017/11/14 PHP
JS获取scrollHeight问题想到的标准问题
2007/05/27 Javascript
Javascript !!的作用
2008/12/04 Javascript
javascript打开新窗口同时关闭旧窗口
2009/01/16 Javascript
js操作时间(年-月-日 时-分-秒 星期几)
2010/06/20 Javascript
juqery 学习之四 筛选过滤
2010/11/30 Javascript
jQuery获取选中内容及设置元素属性的方法
2014/07/09 Javascript
让人蛋疼的JavaScript语法特性
2014/09/30 Javascript
jquery判断至少有一个checkbox被选中的方法
2015/06/05 Javascript
用js动态添加html元素,以及属性的简单实例
2016/07/19 Javascript
JS使用cookie实现只出现一次的广告代码效果
2017/04/22 Javascript
Vue.js 表单控件操作小结
2018/03/29 Javascript
使用proxy实现一个更优雅的vue【推荐】
2018/06/19 Javascript
基于Vue+element-ui 的Table二次封装的实现
2018/07/20 Javascript
node中的密码安全(加密)
2018/09/17 Javascript
vue-cli3.0 环境变量与模式配置方法
2018/11/08 Javascript
JS实现获取数组中最大值或最小值功能示例
2019/03/02 Javascript
理解Proxy及使用Proxy实现vue数据双向绑定操作
2020/07/18 Javascript
微信小程序之高德地图多点路线规划过程示例详解
2021/01/18 Javascript
Python面向对象基础入门之编码细节与注意事项
2018/12/11 Python
python调用外部程序的实操步骤
2019/03/04 Python
使用python制作一个为hex文件增加版本号的脚本实例
2019/06/12 Python
html2canvas把div保存图片高清图的方法示例
2018/03/05 HTML / CSS
ASOS西班牙官网:英国在线时尚和美容零售商
2020/01/10 全球购物
婚礼新郎父母答谢词
2014/01/16 职场文书
教师绩效考核方案
2014/01/21 职场文书
《狮子和兔子》教学反思
2014/03/02 职场文书
岗位聘任书范文
2014/03/29 职场文书
初中生评语大全
2014/04/24 职场文书
初中优秀班集体申报材料
2014/05/01 职场文书
放假通知格式
2015/04/14 职场文书
在校学生证明格式
2015/06/24 职场文书
2019通用版新员工入职培训方案!
2019/07/11 职场文书
Python 多线程处理任务实例
2021/11/07 Python