2017-10-18 4 views
2

Gibt es eine Möglichkeit, dass die Verwendung eines Express-Route Consumer einen Eingabestream an den Endpunkt senden und lesen kann?nodejs Eingabestream mit Express

Kurz gesagt, ich möchte der Endpoint-Benutzer eine Datei hochladen, indem sie es anstelle der Multipart/Form-Weg streamen. Etwas wie:

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

Ist es möglich, es zu tun?

+0

Bibliothek https://github.com/mscdex/busboy wird das tun, Sie erhalten auch jede Datei als Stream. –

Antwort

3

In Express, das request Objekt ist eine erweiterte Version von http.IncomingMessage, die "... den Readable-Stream-Schnittstelle implementiert".

Mit anderen Worten, ist request bereits ein Strom:

app.post('/videos/upload', (request, response) => { 
    request.on('data', data => { 
    ...do something... 
    }).on('close',() => { 
    ...do something else... 
    }); 
}); 

Wenn Ihre Absicht ist es, zunächst die gesamte Datei in den Speicher gelesen (wahrscheinlich nicht), können Sie auch bodyParser.raw() verwenden:

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... 
});