繁体   English   中英

分块的base64字符串,使用http nodejs逐段

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM