node.js - node - zlib js
¿Cómo canalizar un flujo legible en dos flujos grabables a la vez en Node.js? (2)
Descubrí que zlib devuelve un flujo legible que puede canalizarse posteriormente a otros múltiples flujos. Así que hice lo siguiente para resolver el problema anterior:
var sourceFileStream = fs.createReadStream(sourceFile);
// Even though we could chain like
// sourceFileStream.pipe(zlib.createGzip()).pipe(response);
// we need a stream with a gzipped data to pipe to two
// other streams.
var gzip = sourceFileStream.pipe(zlib.createGzip());
// This will pipe the gzipped data to response object
// and automatically close the response object.
gzip.pipe(response);
// Then I can pipe the gzipped data to a file.
gzip.pipe(fs.createWriteStream(targetFilePath));
La meta es:
- Crear una secuencia de lectura de archivos.
-
zlib.createGzip()
a gzip (zlib.createGzip()
) Luego canalice el flujo de lectura de la salida de zlib a:
1) objeto de
response
HTTP2) y la secuencia de archivos de escritura para guardar la salida comprimida.
Ahora puedo hacer hasta 3.1:
var gzip = zlib.createGzip(),
sourceFileStream = fs.createReadStream(sourceFilePath),
targetFileStream = fs.createWriteStream(targetFilePath);
response.setHeader(''Content-Encoding'', ''gzip'');
sourceFileStream.pipe(gzip).pipe(response);
... que funciona bien, pero también necesito guardar los datos comprimidos en gzip en un archivo para que no tenga que volver a apretar cada vez y poder transmitir directamente los datos comprimidos en formato gzip como respuesta.
Entonces, ¿cómo canalizo un flujo legible en dos flujos grabables a la vez en Nodo?
Sería sourceFileStream.pipe(gzip).pipe(response).pipe(targetFileStream);
¿Trabaja en el nodo 0.8.x?
El encadenamiento / división de tuberías no funciona como lo está tratando de hacer aquí, enviando el primero a dos pasos subsiguientes diferentes:
sourceFileStream.pipe(gzip).pipe(response);
Sin embargo, puede canalizar el mismo flujo legible en dos flujos grabables, por ejemplo:
var fs = require(''fs'');
var source = fs.createReadStream(''source.txt'');
var dest1 = fs.createWriteStream(''dest1.txt'');
var dest2 = fs.createWriteStream(''dest2.txt'');
source.pipe(dest1);
source.pipe(dest2);