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

标签 node.js

如何在 nodejs 中将流转换为缓冲区?这是我在 express 中解析 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!');
  });
});

最佳答案

您可以将 readableend 事件处理程序附加到 part 流以读取它,而不是管道:

var buffers = [];
part.on('readable', function(buffer) {
  for (;;) {
    let buffer = part.read();
    if (!buffer) { break; }
    buffers.push(buffer);
  }
});
part.on('end', function() {
  var buffer = Buffer.concat(buffers);
  ...do your stuff...

  // write to file:
  fs.writeFile('image/' + part.filename, buffer, function(err) {
    // handle error, return response, etc...
  });
});

注意:如果您改为使用 data,它会将整个上传内容读入内存。

您还可以创建自定义 transform stream转换传入的数据,但这可能不是微不足道的。

关于node.js - 将流转换为缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19906488/

相关文章:

node.js - 我应该在哪里安装/保存node_modules?

node.js - 处理来自 Promise.all 的一系列 Promise

javascript - 更改 Node js中获取的json数据?

java - 在Java中发送HTTP POST请求

node.js - 使用 jest 和 superagent 进行测试时如何模拟函数

javascript - 尝试通过 Angular 服务 POST 请求时出现错误请求 404

node.js - Puppeteer 由于 Node 模块错误而失败

node.js - NodeJS 上的 Memcached - node-memcached 或 node-memcache,哪个更稳定?

node.js - Sequelize : what's the point of models?

node.js - Mongoose 仅​​查找那些在另一个集合中有条目的人