2017-08-30 10 views
1

私は、http urlをチェックするHTTPプロキシプログラムを作成しています。ダウンロードリンク(content-type:octet-stream)であれば、 request.postとhttpプロキシによって与えられた応答を伴う他のコンピュータダウンロードファイルを使用してコンピュータnodejs pipe request.postへのhttpsレスポンスと書き込みファイル

のは、WebプロキシコンピュータはA.であり、それは(私はA.でファイルをダウンロードすることができますが、私は、PC Bにこの応答を送信したいA. 192.168.5.253

if(contentType && (contentType== "application/octet-stream" || contentType == "application/gzip")){ 
       console.log("remoteRes##app",remoteRes); 
       let filepath = req.url.split('/'); 
       let FileName = getFilename(remoteRes, filepath); 
       let writeStream = fs.createWriteStream(FileName); 


    /*remoteRes is octect-stream response. 
     I can get file buffer If I use remoteRes.on(data, chunk => {...})*/ 
       remoteRes.pipe(writeStream); //It works but I want to send file buffer to B without writing file. 
......... 

のコードの一部であると仮定してみましょう192.168.5.32:10001)サーバー。

remoteRes.pipe(request.post('http://192.168.5.32:10001/upload)); 

そして、これはサーバB(192.168.5.32)コード

router.post('/upload', (req, res, next) => { 


    let wstream = fs.createWriteStream('ffff.txt'); 

    req.pipe(wstream); //It dosen't work, but I want to do like this. 

}) 

の一部である私が '/アップロード'(router.postにfilebuffer取得したい: は、だから私はこのようにストリーミングしたいです)。もしそれがポストかプットであればそれは問題ではありません。 remoteRes.pipe(request.post( 'http://192.168.5.32:10001/upload))を使用すると、そのことがわかりました。 、私はServerAからのリクエストがServerBに到達するのを見た。しかし、私はServerBのファイルバッファを取得できませんでした。要するに、request.postに応答をパイプしたいと思います。

+0

1)** A **ファイルを取得して** B ** に投稿します** B **はファイルに書き込み、** A **から発信された投稿に返答しますシナリオ? – EMX

+0

request.postまたはputによってBにファイルバッファを持ち、BにBファイルを書き込むパイプ応答です。私は答えを返す必要はありません。 – jijijijiji

答えて

1

それは


ルータ要求ハンドラで利用できるようになりますので、あなたは(実施例を持っているあなたはそれを保存し、シングルとしてそれをテストすることができますここでは、独自のミドルウェアを使用して、受信バッファを保存する必要がありますファイル):

//[SERVER B] 
const express = require('express'); const app = express() 
//:Middleware for the incoming stream 
app.use(function(req, res, next) { 
    console.log("[request middleware] (buffer storing)") 
    req.rawBody = '' 
    req.on('data', function(chunk) { 
    req.rawBody += chunk 
    console.log(chunk) // here you got the incoming buffers 
    }) 
    req.on('end', function(){next()}) 
}); 
//:Final stream handling inside the request 
app.post('/*', function (req, res) { 
/* here you got the complete stream */ 
console.log("[request.rawBody]\n",req.rawBody) 
}); 
app.listen(3000) 

//[SERVER A] 
const request = require('request') 
request('http://google.com/doodle.png').pipe(request.post('http://localhost:3000/')) 

ご希望の用途に合わせて推測してください。

関連する問題