node.js – 将流转换为缓冲区?

如何将stream转换成nodejs中的缓冲区?这是我的代码解析一个文件在post请求在快递。

app.post('/upload',express.multipart({
defer: true
}),function(req,res) {
req.form.on('part',function(part) {

//Here I want to convert the streaming part into a buffer.
//do something buffer-specific task

  var out = fs.createWriteStream('image/' + part.filename);
  part.pipe(out);
});

req.form.on('close',function() {
    res.send('uploaded!');
  });
});

解决方法

您可以使用 stream-to模块,它可以将可读流的数据转换为数组或缓冲区:

var streamTo = require('stream-to');
req.form.on('part',function (part) {
  streamTo.buffer(part,function (err,buffer) {
    // Insert your business logic here
  });
});

如果您希望更好地了解幕后发生的情况,您可以使用Writable stream.自己实现逻辑。作为可写入流实现者,您只需定义一个函数_write method,每次有些数据将被调用写入流。当输入流完成发射数据时,将发出end event:然后我们将使用Buffer.concat method创建一个缓冲区。

var stream = require('stream');
var converter = new stream.Writable();
converter.data = []; // We'll store all the data inside this array
converter._write = function (chunk) {
  this.data.push(chunk);
};
converter.on('end',function() { // Will be emitted when the input stream has ended,ie. no more data will be provided
  var b = Buffer.concat(this.data); // Create a buffer from all the received chunks
  // Insert your business logic here
});

相关文章

这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关...