Nodejs将Buffer转化成Stream
编写接口的时候经常需要将上传的文件保存到数据库的情况,在nodejs中文件上传可以使用multer来接收上传的文件。如果不想保存到本地,而是直接保存到mongodb中,就要将buffer对象转化成流再写入数据库。
虽然fs模块的接口文档中说该模块可以接收Buffer对象作为参数,但实践中发现传入buffer对象会报错:
var fs = require('fs');
var b = Buffer([80,80,80,80]);
var readStream = fs.createReadStream(b);
console.log(readStream);
// ReadStream {
// ...
// path: <Buffer 50 50 50 50>,
// ...
// }
//
// Error: ENOENT: no such file or directory, open 'PPPP'
根据
https://stackoverflow.com/questions/45891242/how-to-pass-a-buffer-as-argument-of-fs-createreadstream/45891702#45891702
的回答,fs的内部是调用open()函数,所以实际上只能接收文件路径,并不能使用buffer对象作为参数。
为了实现这个目的,就要将Buffer对象转化成stream,这列可以使用一个stream模块:
var stream = require('stream');
// 创建一个bufferstream
var bufferStream = new stream.PassThrough();
//将Buffer写入
bufferStream.end(new Buffer('Test data.'));
//进一步使用
bufferStream.pipe(process.stdout)
这样就可以将buffer转化成stream。
参考https://stackoverflow.com/questions/16038705/how-to-wrap-a-buffer-as-a-stream2-readable-stream
Nodejs将Buffer转化成Stream的更多相关文章
- nodejs: 理解Buffer
学习nodejs中buffer这一章,有一段写到buffer的拼接,其中一段源码非常优美,特拿来与大家共享. var chunks = []; var size = 0; res.on('data', ...
- 大熊君大话NodeJS之------Buffer模块
一,开篇分析 所谓缓冲区Buffer,就是 "临时存贮区" 的意思,是暂时存放输入输出数据的一段内存. JS语言自身只有字符串数据类型,没有二进制数据类型,因此NodeJS提供了一 ...
- nodejs笔记之流(stream)
nodejs的stream有四种流类型: 可读:Readable可写:Writable可读可写:Duplex操作被写入数据,然后读出结果:Transform常用事件:data:有数据可读时触发end: ...
- nodeJs的Buffer操作
再nodejs里,很多类是引入模块才能使用,Buffer是一个全局类,他不需要require引入 Buffer有三种构造函数 //1.在构造函数传一个数字,规定buffer的长度.默认全是16进制的0 ...
- NodeJS中Buffer模块详解
一,开篇分析 所谓缓冲区Buffer,就是 "临时存贮区" 的意思,是暂时存放输入输出数据的一段内存. JS语言自身只有字符串数据类型,没有二进制数据类型,因此NodeJS提供了一 ...
- 将String转化成Stream,将Stream转换成String
using System;using System.IO;using System.Text;namespace CSharpConvertString2Stream{ class Progr ...
- Nodejs·理解Buffer
Node里面的Buffer其实就是用于网络请求.文件读取等等操作,而且是分配在堆外,不会占用堆内的内存,这也是因为本来V8的内存就很小,如果读取大文件,那就...... 之前有看过Logstash的B ...
- 浅析nodejs的buffer类(转)
最近翻阅了node v0.10.4的buffer类的源代码,收获不少,也很久没有在cnode上发表文章了,想把一些收获分享给大家,有什么错误的地方希望大牛们指正啊. 前阵子有位rrestjs框架的使用 ...
- nodejs(三)Buffer module & Byte Order
一.目录 ➤ Understanding why you need buffers in Node ➤ Creating a buffer from a string ➤ Converting a b ...
随机推荐
- 6 Django的视图层
视图函数 一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . ...
- Kotlin 二分法算法游戏--猜价格
本人最新想学习算法,算法是提高程序性能的关键! 程序就是数据结构和算法! 写了一个二分法的游戏,供大家参考: 当然,语言基于kotlin import java.util.* /** * Create ...
- ElasticSearch学习笔记(四)-- 分布式
1. 分布式介绍及cerebro cerebro插件 点击release下载 解压运行 访问9000端口,连接es的9200端口 2. 构建集群 新增一个节点 3. 副本与分片 再加入一个节点 4. ...
- 剑指Offer - 九度1356 - 孩子们的游戏(圆圈中最后剩下的数)
剑指Offer - 九度1356 - 孩子们的游戏(圆圈中最后剩下的数)2014-02-05 19:37 题目描述: 每年六一儿童节,JOBDU都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此.H ...
- node express 登录拦截器 request接口请求
1.拦截器 拦截器可以根据需要 做权限拦截 登录只是权限的一种, 思路是req.session.user判断用户session是否存在,是否是需要拦截的地址, 如果是就跳转登录页,或其他页, 如果非需 ...
- 安装LoadRunner11报缺少vc2005_sp1_with_atl_fix_redist的错误
找到安装程序自带的lrunner\Chs\prerequisites\vc2005_sp1_redist,双击运行vcredist_x86.exe,再重新安装LoadRunner即可成功. 参考资料: ...
- mac虚拟机上(centos系统)设置联网
前面介绍了mac安装虚拟机VirtualBox,并在虚拟机上装上了centos,这里在说明一下联网问题. 首先打开centos系统,并输入命令$ ip addr 可得到如下: 发现找不到ip地址,这时 ...
- python学习总结---面向对象1
面向对象 - 与面向过程对比 - 面向过程:数学逻辑的映射,学会做个好员工. - 面向对象:生活逻辑的映射,学会做个好领导. - 生活实例 - 类: 人 手机 电脑 - 对象: 习大大.普京 二狗的i ...
- 使用UltraEdit搭建自己的C/C++ IDE
使用UltraEdit搭建自己的C/C++ IDE CodeBlocks的13.12版本啊,主要缺点是启动慢,而且在Windows上容易假死,写着写着就无响应了,然后死活活不过来.所以没办法,只好干脆 ...
- PHP字符串基本操作函数
常用函数: trim():去除字符串的空格及传入的参数 strlen():获取字符串长度 substr():按照两个参数截取字符串 str_replace():字符串替换 str_split():将字 ...