详解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 相关文章推荐
抛弃Nginx使用nodejs做反向代理服务器
Jul 17 NodeJs
Nodejs从有门道无门菜鸟起飞必看教程
Jul 20 NodeJs
nodejs入门教程二:创建一个简单应用示例
Apr 24 NodeJs
详解nodeJS之二进制buffer对象
Jun 03 NodeJs
详解nodejs模板引擎制作
Jun 14 NodeJs
NodeJs中express框架的send()方法简介
Jun 20 NodeJs
nodejs开发微信小程序实现密码加密
Jul 11 NodeJs
让nodeJS支持ES6的词法----babel的安装和使用方法
Jul 31 NodeJs
详解Nodejs 通过 fs.createWriteStream 保存文件
Oct 10 NodeJs
Nodejs使用Mongodb存储与提供后端CRD服务详解
Sep 04 NodeJs
Nodejs模块的调用操作实例分析
Dec 25 NodeJs
详解Nodejs get获取远程服务器接口数据
Mar 26 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语法速查表
2007/01/02 PHP
浅析使用Turck-mmcache编译来加速、优化PHP代码
2013/06/20 PHP
php中ob_get_length缓冲与获取缓冲长度实例
2014/11/20 PHP
分享常见的几种页面静态化的方法
2015/01/08 PHP
详解如何在云服务器上部署Laravel
2017/06/30 PHP
php提取微信账单的有效信息
2018/10/01 PHP
使用composer安装使用thinkphp6.0框架问题【视频教程】
2019/10/01 PHP
prototype Element学习笔记(篇二)
2008/10/26 Javascript
jQuery带箭头提示框tooltips插件集锦
2014/11/17 Javascript
jQuery/CSS3图片特效插件整理推荐
2014/12/07 Javascript
jQuery实现购物车表单自动结算效果实例
2015/08/10 Javascript
JS未跨域操作iframe里的DOM
2016/06/01 Javascript
js常用DOM方法详解
2017/02/04 Javascript
JS中使用gulp实现压缩文件及浏览器热加载功能
2017/07/12 Javascript
JS+canvas实现的五子棋游戏【人机大战版】
2017/07/19 Javascript
在vue项目中引入highcharts图表的方法(详解)
2018/03/05 Javascript
JavaScript使用math.js进行精确计算操作示例
2018/06/19 Javascript
详解JavaScript 异步编程
2020/07/13 Javascript
python Selenium爬取内容并存储至MySQL数据库的实现代码
2017/03/16 Python
详解tensorflow训练自己的数据集实现CNN图像分类
2018/02/07 Python
python微信跳一跳系列之棋子定位颜色识别
2018/02/26 Python
python+os根据文件名自动生成文本
2019/03/21 Python
pytorch中tensor张量数据类型的转化方式
2019/12/31 Python
django2.2 和 PyMySQL版本兼容问题
2020/02/17 Python
不同浏览器对CSS3和HTML5的支持状况
2009/10/31 HTML / CSS
html5 更新图片颜色示例代码
2014/07/29 HTML / CSS
HTML5到底会有什么发展?HTML5的前景展望
2015/07/07 HTML / CSS
英国领先的在线高尔夫商店:Gamola Golf
2019/11/16 全球购物
C语言基础笔试题
2013/04/27 面试题
入党积极分子思想汇报
2014/01/02 职场文书
爱护公物演讲稿
2014/09/09 职场文书
2014县委书记党的群众路线教育实践活动对照检查材料思想汇报
2014/09/22 职场文书
暑期工社会实践报告
2015/07/13 职场文书
病房管理制度范本
2015/08/06 职场文书
《秋天的雨》教学反思
2016/02/19 职场文书
苹果macOS 13开发者预览版Beta 8发布 正式版10月发布
2022/09/23 数码科技