javascript - http 请求数据中的多个包

标签 javascript node.js

我在 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') block 上的 .push() 将它们放入数组中,并使用 Buffer.concat().on('end') block 上。然后转换组合的缓冲区。

引用: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});
    });
});

关于javascript - http 请求数据中的多个包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60337101/

相关文章:

javascript - 使用Jquery只允许某些字符,并带有错误消息

javascript - 我可以获得存储在对象中的函数的字符串化代码吗?

node.js - 使用sequelize-cli后如何从sequelize.model获取模型

javascript - 并排对齐部分

javascript - 无法访问 jquery 中的对象(prevObject?)

javascript - 我无法使用 Unsplash

javascript - promise 并确保 Node JS 准备就绪

node.js - Sequelize Typescript : Type 'FavoriteEntity[]' is not assignable to type 'FavoriteEntity | null'

javascript - node.js 中的 Redis 错误

javascript - 将toDataUrl base64字符串转成页面上的图片