2017-08-30 1 views
1

Je fais http programme proxy qui vérifient http url et Si c'est le lien de téléchargement (type de contenu: octet-stream), j'obtiendrais réponse et relayer cette réponse à d'autres ordinateur en utilisant request.post et un autre fichier de téléchargement d'ordinateur avec la réponse qui sont donnés par proxy http.nodejs pipe https réponse à request.post et écrire le fichier

Supposons que l'ordinateur proxy web est A. Et Il fait partie du code de 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. 
......... 

Je peux télécharger le fichier en A., mais je veux envoyer cette réponse à un PC B (192.168.5.32:10001) serveur. Je veux en streaming comme ceci:

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

Et cela fait partie du Code Serveur 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. 

}) 

Je veux filebuffer dans router.post ('/ upload'). Cela n'a pas d'importance s'il est post ou mis. J'ai vu ça quand j'utilise remoteRes.pipe (request.post ('http://192.168.5.32:10001/upload)); , j'ai vu cette requête de ServerA arriver au ServerB. Mais je ne pouvais pas obtenir le tampon de fichier dans ServerB. En bref, je veux rediriger la réponse vers request.post.

+0

1) ** A ** Extrait le fichier et le poste à ** B ** ** B ** écrit dans le fichier et répond à l'article qui provient de ** A **, est-ce le scénario? – EMX

+0

Une réponse de tuyau qui a le tampon de fichier à B par request.post ou mettre et B écrire le fichier à B. Je n'ai pas besoin de réponse. – jijijijiji

Répondre

1

Vous devez stocker les tampons entrants en utilisant votre propre middleware, il sera disponible dans le gestionnaire de demande de routeurs


Ici vous avez un exemple de travail (vous pouvez l'enregistrer et de le tester en une seule fichier):

//[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/')) 

J'espère que vous pouvez extrapoler cela pour votre cas d'utilisation spécifique.