详解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教程之制作一个简单的文章发布系统
Nov 21 NodeJs
nodejs URL模块操作URL相关方法介绍
Mar 03 NodeJs
Nodejs初级阶段之express
Nov 23 NodeJs
学习 NodeJS 第八天:Socket 通讯实例
Dec 21 NodeJs
NodeJs下的测试框架Mocha的简单介绍
Feb 22 NodeJs
nodejs根据ip数组在百度地图中进行定位
Mar 06 NodeJs
angular2+nodejs实现图片上传功能
Mar 27 NodeJs
nodejs6下使用koa2框架实例
May 18 NodeJs
CentOS 安装NodeJS V8.0.0的方法
Jun 15 NodeJs
docker中编译nodejs并使用nginx启动
Jun 23 NodeJs
nodejs中方法和模块用法示例
Dec 24 NodeJs
Nodejs异步流程框架async的方法
Jun 07 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
《五等分的花嫁》漫画完结!2020年10月第2期TV动画制作组换血!
2020/03/06 日漫
PHP5 面向对象(学习记录)
2009/12/02 PHP
PHP clearstatcache()函数详解
2010/03/02 PHP
php中将时间差转换为字符串提示的实现代码
2011/08/08 PHP
php中将汉字转换成拼音的函数代码
2012/09/08 PHP
php 模拟GMAIL,HOTMAIL(MSN),YAHOO,163,126邮箱登录的详细介绍
2013/06/18 PHP
php通过获取头信息判断图片类型的方法
2015/06/26 PHP
PHP数组内存利用率低和弱类型详细解读
2017/08/10 PHP
javascript 读取图片文件的大小
2009/06/25 Javascript
仿新浪微博返回顶部的jquery实现代码
2012/10/01 Javascript
关于JavaScript的面向对象和继承有利新手学习
2013/01/11 Javascript
jQuery客户端分页实例代码
2013/11/18 Javascript
JavaScript把数组作为堆栈使用的方法
2015/03/20 Javascript
对于jQuery性能的一些优化建议
2015/08/13 Javascript
纯JS实现轮播图
2017/02/22 Javascript
js数组实现权重概率分配
2017/09/12 Javascript
jQuery实现的事件绑定功能基本示例
2017/10/11 jQuery
SVG实现时钟效果
2018/07/17 Javascript
使用Vue 自定义文件选择器组件的实例代码
2020/03/04 Javascript
Vue事件处理原理及过程详解
2020/03/11 Javascript
[04:38]完美世界携手游戏风云打造 卡尔工作室饰品系统篇
2013/04/25 DOTA
Eclipse + Python 的安装与配置流程
2013/03/05 Python
Python的词法分析与语法分析
2013/05/18 Python
python连接oracle数据库实例
2014/10/17 Python
详解Python中for循环的使用
2015/04/14 Python
python自定义解析简单xml格式文件的方法
2015/05/11 Python
Python获取linux主机ip的简单实现方法
2016/04/18 Python
python ddt实现数据驱动
2018/03/14 Python
python3.5绘制随机漫步图
2018/08/27 Python
Python数据分析模块pandas用法详解
2019/09/04 Python
华为旗下电子商务平台:华为商城
2016/08/06 全球购物
如何判断计算机可能已经中马
2013/03/22 面试题
工程造价专业大学生职业规划范文
2014/03/09 职场文书
管理建议书范文
2014/05/13 职场文书
钓鱼岛事件感想
2015/08/11 职场文书
《扇形统计图》教学反思
2016/02/17 职场文书