编写接口的时候经常需要将上传的文件保存到数据库的情况,在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

最新文章

  1. python property理解
  2. 禁用ViewPager边界滑动效果(转)
  3. [源码]RandomId 生成随机字符串
  4. Ext.NET 4.1 系统框架的搭建(后台) 附源码
  5. ssh 免密码设置失败原因总结
  6. virtualBox下面安装linux系统如何共享目录
  7. 转:php park、unpark、ord 函数使用方法(二进制流接口应用实例)
  8. [Python] Basic operations in Pycharm
  9. Openwrt 无法上40MHZ带宽
  10. Start GitHub
  11. MATLAB学习笔记(四)&mdash;&mdash;文件操作
  12. ssh 安装
  13. PowerDesigner一些小技巧
  14. centeros resin安装脚本启动
  15. iOS SQLite解密之SQLCipher
  16. php Redis函数使用总结(string,hash,list, set , sort set )
  17. android Gradle的几个基本概念
  18. CentOS 6.5 搭建 .NET 环境, Mono 5.16.0 + Jexus 5.8
  19. 2018牛客网暑假ACM多校训练赛(第四场)E Skyline 线段树 扫描线
  20. vue-router中query和params传参(接收参数)以及$router、$route的区别

热门文章

  1. 20145202马超 《Java程序设计》第五周学习总结
  2. Android webview 加载https网页显示空白
  3. Java-JNA使用心得2
  4. stm32--free modbus 1.5.0移植(作为从机)
  5. Java继承的缺点
  6. Yapi的坑
  7. jQuery基础知识点(上)
  8. Web 安全概念
  9. InputStream 、 InputStreamReader 、 BufferedReader
  10. [zoj] 1081 Points Within || 判断点是否在多边形内