Ja, es ist möglich. Ich empfehle, einen Blick auf Streams Playground zu werfen, um ein Gefühl dafür zu bekommen, wie Knoten-Streams funktionieren.
Die ZIP-Komprimierung in der zlib-Kernbibliothek scheint nicht mehrere Dateien zu unterstützen. Wenn Sie mit tar-gzip arbeiten möchten, können Sie es mit node-tar tarieren. Aber wenn Sie ZIP wollen, sieht adm-zip wie die beste Option aus. Eine andere Möglichkeit ist node-archiver.
Update:
Diese example zeigt, wie Archiver verwenden, die Streams unterstützt. Ersetzen Sie einfach fs.createReadStream
durch die Streams, die Sie dynamisch erstellen, und senden Sie output
an Express res
statt an fs.createWriteStream
.
var fs = require('fs');
var archiver = require('archiver');
var output = fs.createWriteStream(__dirname + '/example-output.zip');
var archive = archiver('zip');
output.on('close', function() {
console.log('archiver has been finalized and the output file descriptor has closed.');
});
archive.on('error', function(err) {
throw err;
});
archive.pipe(output);
var file1 = __dirname + '/fixtures/file1.txt';
var file2 = __dirname + '/fixtures/file2.txt';
archive
.append(fs.createReadStream(file1), { name: 'file1.txt' })
.append(fs.createReadStream(file2), { name: 'file2.txt' });
archive.finalize(function(err, bytes) {
if (err) {
throw err;
}
console.log(bytes + ' total bytes');
});
Es ist klar, nicht das, was Sie durch "um die ZIP-Datei gestreamt" bedeuten ... welche Datei wird der HTTP-Client empfangen schlussendlich? die Zip-Datei? oder eine Verkettung der drei Textdateien? –
Entschuldigung, Formatierung wurde durcheinander gebracht, hoffentlich ist das klarer. Ich möchte einen Zip zurücksenden. 2 Hauptprobleme versuche ich meinen Kopf einzuwickeln. 1. Wie streame ich die Zip zurück, 2. wie streame ich meine 3 Dateien in eine Zip-Datei, die ich zurück streame. I.E. Ich habe Beispiele für das Streaming einer Zip-Datei gesehen, die bereits im Dateisystem vorhanden ist, aber es gibt kein Beispiel dafür, wie Sie das tun, wenn Sie die Dateien im Fly erstellen. – lostintranslation
konnten Sie eine Problemumgehung für dasselbe finden? –