目標は次のとおりです。
- ファイル読み取りストリームを作成します。
- gzipにパイプします(
zlib.createGzip()
) 次に、zlib出力の読み取りストリームを次の場所にパイプします。
1)HTTP
response
オブジェクト2)gzip圧縮された出力を保存するための書き込み可能なファイルストリーム。
これで、3.1まで実行できます。
var gzip = zlib.createGzip(),
sourceFileStream = fs.createReadStream(sourceFilePath),
targetFileStream = fs.createWriteStream(targetFilePath);
response.setHeader('Content-Encoding', 'gzip');
sourceFileStream.pipe(gzip).pipe(response);
...これは正常に機能しますが、gzipで圧縮されたデータをファイルに保存する必要もあります。これにより、毎回再圧縮する必要がなくなり、gzipで圧縮されたデータを応答として直接ストリーミングできるようになります。
では、Nodeで1つの読み取り可能なストリームを2つの書き込み可能なストリームに一度にパイプするにはどうすればよいですか?
sourceFileStream.pipe(gzip).pipe(response).pipe(targetFileStream);
Node 0.8.xで動作しますか?