NodeJS - ExpressJS: Как транслировать тело запроса без буферизации - PullRequest
1 голос
/ 07 мая 2020

Мне нужно обработать некоторый запрос без content-type в виде двоичного файла

const app = express();
app.use(bodyParser.raw({type: (req) =>  !req.headers['content-type'], limit: '500mb' }));

этот файл может быть огромным (например, 500 МБ).

Я хочу прочитать req.body как поток для не тратить память, а bodyParser.raw() сделать req.body как Buffer.

Как обрабатывать req.body как Stream?

1 Ответ

1 голос
/ 16 мая 2020

Вы можете использовать поток для обработки огромного файла.

Express HTTP-запрос является читаемым потоком, вы можете передать двоичный файл запроса в файл, но убедитесь, что вывод также является потоком с возможностью записи.

Пример кода:

const fs = require('fs');
const path = require('path');
const express = require('express');
const app = express();

app.post('/', (req, res, next) => {
    req.pipe(fs.createWriteStream(path.join('./uploadFiles', Date.now().toString() + '.mp4')));
    req.on('end', () => {
        res.end('Upload complete');
        next();
    })
})

app.listen('3000', () => {
    console.log('Server listen to port 3000');
})
...