[英]Chunked base64 string, piece by piece using http nodejs
从我的API(nodejs),我正在访问第三方API(使用http)下载文件。 该服务返回一个Base64字符串,将其切成小段,以便能够处理较大的文件。
是否可以对第三方服务进行多个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)
};
});
};
我认为您需要Socket.io将块推送到浏览器。
服务器:
socket.send("chunk", chunkOfFile)
客户:
let fullString = ""
socket.on("chunk", chunkOfFile => fullString += chunkOfFile )
像这样
您正在使用的request
库允许将数据从一个源流传输到另一个源。 查看github上的文档。 这是该页面上的示例:
request
.get(source)
.on('response', function(response) {
console.log(response.statusCode) // 200
console.log(response.headers['content-type']) // 'image/png'
})
.pipe(request.put(destination))
您可以选择使用Nodejs中的http
模块,因为它也实现了EventEmitter类。
我最终从客户端进行了递归循环。 将http请求发送到我的API(节点),直到响应不再返回任何base64数据块为止。
感谢大伙们!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.