2017-08-21 5 views
0

私のAPI(nodejs)から、httpを使用してファイルをダウンロードするサードパーティのAPIにアクセスしています。 サービスは、より大きなファイルを処理できるように、小さな部分に細断されたBase64文字列を返します。http nodejsを使用したチャンクベース64文字列

第三者サービスからの応答がなくなるまで、応答として各部分をブラウザに送信して、サードパーティサービスに複数のhttp要求(ループ?)を行うことはできますか?

私がこれをやりたい理由は、ノードサーバー上の多くのメモリを消費したくないからです。

私はそれらの部分をブラウザに戻します。

これを行う方法に関するご提案はありますか? 下記の私の現在のコードを見てください。

var request = require('request'); 
router.post('/getfiledata', function(req, res) { 

     var fileid = req.body.fileid; 
     var token = req.headers.authorization; 

     getFileData(req, res, dbconfig, fileid, token, function(err, chunkOfFile) { 
      if (err) { 
       res.status(500).send({ 
        status: 500, 
        message: err 
       }); 
       return; 
      } 
      res.send(chunkOfFile); 
     }); 
}); 

function getFileData(req, res, dbconfig, fileid, token, next) { 

var url ="http://*ip*/service/rest/getfiledata"; 

var reqbody = { 
    fileId: fileid 
}; 

var options = { 
    url: url, 
    method: 'POST', 
    headers: { 
     'Content-Type': 'application/json', 
     'Authorization': token 
    }, 
    json: true, 
    body: reqbody 
}; 

/*SOME LOOP HERE TO GET EACH CHUNK AND SEND TO BROWSER*/ 
    request(options, function(err, resp, body) { 

     if (err) { 
      console.log(err); 
      next(err, undefined); 
      return; 

     } else { 
      next(undefined, body) 
     }; 
    }); 

}; 

答えて

0

チャンクをブラウザにプッシュするには、Socket.ioが必要です。

サーバー:

socket.send("chunk", chunkOfFile) 

はクライアント:あなたが使用している

let fullString = "" 
socket.on("chunk", chunkOfFile => fullString += chunkOfFile) 

その

0

ような何かrequestライブラリは、別のソースからのデータのストリーミングが可能になります。 githubのドキュメントをご覧ください。あなたはそれがあまりにもEventEmitterクラスを実装すると、Nodejsからhttpモジュールを使用することもできます

request 
    .get(source) 
    .on('response', function(response) { 
    console.log(response.statusCode) // 200 
    console.log(response.headers['content-type']) // 'image/png' 
    }) 
    .pipe(request.put(destination)) 

:ここ は、そのページからの例です。

0

私はクライアントから再帰的なループをやり終えました。レスポンスがbase64データチャンクを返さなくなるまで、自分のAPI(ノード)にhttpリクエストを送信します。

ありがとう!

関連する問題