如何在 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!');
});
});
最佳答案
您可以将 readable
和 end
事件处理程序附加到 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/