http中的多个数据包



我在javascript中的http.request遇到问题。我在上收到多个包裹。("数据"(。我知道这是因为我收到的包裹太大了(图片(。稍后我传递一个.toString('base64'(.

问题是我如何连接不同的包,将它们传递给.toString('base64'(。事实上,我试图把所有东西都放在一个字符串中,但.toString('base64'(返回了一些我以后无法处理的东西。

var file = req.body.file;
var post_options = {
host: "localhost",
port: 80,
path: '/api/v1/files/' +file,
method: 'GET',
headers: {
'Authorization': 'Bearer '+ BackendToken.access_token
}
};
var httpg = require('http');
var resultComb ='';    
var post_req = httpg.request(post_options, function(res2) {
res2.on('data', function (chunk) {
resultComb += chunk
});
res2.on('end', function(){
var extension = file.split(".").pop()
var src = ''
switch (extension.toLowerCase()) {
case "mp4":
src = 'data:video/mp4;base64,'
break
case "jpg":
case "jpeg":
case "png":
src = 'data:image/png;base64,'
break
case "pdf":
src = 'data:application/pdf;base64,'
break
}
src += resultComb.toString('base64')
res.json({src:src});
});
});

因为您的数据是二进制的,而不是字符串,所以是缓冲区。无法使用+添加缓冲区。

将它们放在.on('data')块上具有.push()的阵列中,并将它们与.on('end')块上的Buffer.concat()连接。然后转换组合缓冲区。

参考:https://nodejs.org/dist/latest-v12.x/docs/api/buffer.html#buffer_class_method_buffer_concat_list_totallength

可能类似于:

var file = req.body.file;
var post_options = {
host: "localhost",
port: 80,
path: '/api/v1/files/' +file,
method: 'GET',
headers: {
'Authorization': 'Bearer '+ BackendToken.access_token
}
};
var httpg = require('http');
var resultComb = [];    
var post_req = httpg.request(post_options, function(res2) {
res2.on('data', function (chunk) {
resultComb.push(chunk);
});
res2.on('end', function(){
var extension = file.split(".").pop()
var src = ''
switch (extension.toLowerCase()) {
case "mp4":
src = 'data:video/mp4;base64,'
break
case "jpg":
case "jpeg":
case "png":
src = 'data:image/png;base64,'
break
case "pdf":
src = 'data:application/pdf;base64,'
break
}
src += Buffer.concat(resultComb).toString('base64')
res.json({src:src});
});
});

最新更新