详解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 实现模拟form表单上传文件
Jul 14 NodeJs
Nodejs爬虫进阶教程之异步并发控制
Feb 15 NodeJs
nodejs基础知识
Feb 03 NodeJs
Nodejs高扩展性的模板引擎 functmpl简介
Feb 13 NodeJs
实例分析nodejs模块xml2js解析xml过程中遇到的坑
Mar 18 NodeJs
nodejs之get/post请求的几种方式小结
Jul 26 NodeJs
ubuntu编译nodejs所需的软件并安装
Sep 12 NodeJs
详解Nodejs 通过 fs.createWriteStream 保存文件
Oct 10 NodeJs
详解redis在nodejs中的应用
May 02 NodeJs
nodejs 十六进制字符串型数据与btye型数据相互转换
Jul 30 NodeJs
NodeJS模块与ES6模块系统语法及注意点详解
Jan 04 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中去除所有js,html,css代码
2010/10/12 PHP
浅析Apache中RewriteCond规则参数的详细介绍
2013/06/30 PHP
PHP中cookie和session的区别实例分析
2014/08/28 PHP
php冒泡排序与快速排序实例详解
2015/12/07 PHP
Yii2使用swiftmailer发送邮件的方法
2016/05/03 PHP
非常经典的PHP文件上传类分享
2016/05/15 PHP
PHP封装的分页类与简单用法示例
2019/02/25 PHP
javascript firefox不显示本地预览图片问题的解决方法
2008/11/12 Javascript
node.js中的buffer.Buffer.isBuffer方法使用说明
2014/12/14 Javascript
JavaScript获取当前网页最后修改时间的方法
2015/04/03 Javascript
javascript实现选中复选框后相关输入框变灰不可用的方法
2015/08/11 Javascript
React实现双向绑定示例代码
2016/09/19 Javascript
js+html5实现复制文字按钮
2017/07/15 Javascript
vue代理和跨域问题的解决
2018/07/18 Javascript
vue中导出Excel表格的实现代码
2018/10/18 Javascript
详解Vue+Element的动态表单,动态表格(后端发送配置,前端动态生成)
2019/04/20 Javascript
JS箭头函数和常规函数之间的区别实例分析【 5 个区别】
2020/05/27 Javascript
vue点击标签切换选中及互相排斥操作
2020/07/17 Javascript
Vue两种组件类型:递归组件和动态组件的用法
2020/08/06 Javascript
vue3.0 加载json的方法(非ajax)
2020/10/26 Javascript
[02:10]DOTA2 TI10勇士令状玩法及不朽Ⅰ展示:焕新世界,如你所期
2020/05/29 DOTA
Python Sleep休眠函数使用简单实例
2015/02/02 Python
约瑟夫问题的Python和C++求解方法
2015/08/20 Python
[原创]使用豆瓣提供的国内pypi源
2017/07/02 Python
Python实现PS图像调整之对比度调整功能示例
2018/01/26 Python
python使用RNN实现文本分类
2018/05/24 Python
用python写一个定时提醒程序的实现代码
2019/07/22 Python
pytorch 实现在预训练模型的 input上增减通道
2020/01/06 Python
Python网页解析器使用实例详解
2020/05/30 Python
利用CSS3实现圆角的outline效果的教程
2015/06/05 HTML / CSS
CSS3实现苹果手机解锁的字体闪亮效果示例
2021/01/05 HTML / CSS
美国酒店控股公司:Choice Hotels
2018/06/15 全球购物
英文请假条
2014/04/11 职场文书
就业意向协议书
2015/01/29 职场文书
个人更名证明
2015/06/23 职场文书
表扬稿表扬信的格式及范文
2019/06/24 职场文书