使用pipe道语法解压缩stream响应

我试图检索一个file.csv.gz使用request.js,并解压缩,然后parsing和处理。

我知道我希望我的代码看起来像这样

response .pipe(zlib.createGunzip()) .pipe(split()) .pipe(process()) 

然而,我正在努力让我的响应对象以正确的格式被传送。 目前我正在试图通过做出响应来回应。

 const request = require('request'); const headers = { 'accept-encoding':'gzip' } module.exports.getCSV = (url) => { return request({url, headers, gzip:true}); } 

我收到错误,这意味着我正试图解压缩一个不完整的对象。

我也在想,也许不可能做到我想做的事情,相反,我将需要完全下载文件,然后再尝试parsing它进行处理

receive.js

 const http = require('http'); const fs = require('fs'); const zlib = require('zlib'); const server = http.createServer((req, res) => { const filename = req.headers.filename; console.log('File request received: ' + filename); req .pipe(zlib.createGunzip()) .pipe(fs.createWriteStream(filename)) .on('finish', () => { res.writeHead(201, {'Content-Type': 'text/plain'}); res.end('Complete\n'); console.log(`File saved: ${filename}`); }); }); server.listen(3000, () => console.log('Listening')); 

send.js

 const fs = require('fs'); const zlib = require('zlib'); const http = require('http'); const path = require('path'); const file = 'myfile.txt'; //Put your file here const server = 'localhost'; //Put the server here const options = { hostname: server, port: 3000, path: '/', method: 'PUT', headers: { filename: path.basename(file), 'Content-Type': 'application/octet-stream', 'Content-Encoding': 'gzip' } }; const req = http.request(options, res => { console.log('Server response: ' + res.statusCode); }); fs.createReadStream(file) .pipe(zlib.createGzip()) .pipe(req) .on('finish', () => { console.log('File successfully sent'); }); 
    Interesting Posts