使用Express实现Node.js输入流

6

有没有一种方法可以使用express,使路由消费者能够向终端发送输入流并读取它?

简而言之,我希望终端用户通过流式传输而不是multipart / form方式上传文件。就像这样:

app.post('/videos/upload', (request, response) => {
    const stream = request.getInputStream();
    const file = stream.read();
    stream.on('done', (file) => {
        //do something with the file
    });
});

这可行吗?


这个库 https://github.com/mscdex/busboy 可以做到这一点,你可以将每个文件作为流获取。 - Risto Novik
1个回答

10
在 Express 中,request 对象是 http.IncomingMessage 的增强版本,它实现了可读流接口。换言之,request 已经是一个流:
app.post('/videos/upload', (request, response) => {
  request.on('data', data => {
    ...do something...
  }).on('close', () => {
    ...do something else...
  });
});

如果您的意图是首先将整个文件读入内存(可能不是最佳选择),您也可以使用bodyParser.raw()
const bodyParser = require('body-parser');
...
app.post('/videos/upload', bodyParser.raw({ type : '*/*' }), (request, response) => {
  let data = req.body; // a `Buffer` containing the entire uploaded data
  ...do something...
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接