【问题标题】:How to make http.request on "data" handler return Buffers, not strings如何使“数据”处理程序上的 http.request 返回缓冲区,而不是字符串
【发布时间】:2016-05-26 18:10:38
【问题描述】:

我正在尝试通过 http 在 nodejs 中下载二进制文件。受question 的启发,我尝试了这个:

http.get(url,function (res) {
    res.setEncoding('binary');
    var body = [];
    res.on("data", function (chunk) {
        body.push(chunk);
    });
    res.on("end", function () {
        result = Buffer.concat(body);
    });
});

问题是,chunk 数据块属于字符串类型,而不是缓冲区类型。由于这个原因,Buffer.concat(body) 失败了。

为什么以及如何更改?

【问题讨论】:

标签: node.js


【解决方案1】:

“块”之所以是字符串类型,实际上是因为我调用的是setEncoding。如果我删除该行,它会起作用:

http.get(url,function (res) {
    //res.setEncoding('binary');
    var body = [];
    res.on("data", function (chunk) {
        body.push(chunk);
    });
    res.on("end", function () {
        result = Buffer.concat(body);
    });
});

【讨论】:

    【解决方案2】:

    如果你想坚持使用Buffer,你可以使用Buffer.from()函数吗?

    http.get(url,function (res) {
        res.setEncoding('binary');
        var body = [];
        res.on("data", function (chunk) {
            body.push(chunk);
        });
        res.on("end", function () {
            result = Buffer.concat(Buffer.from(body));
        });
    });
    

    【讨论】:

    • “坚持使用缓冲区”是什么意思?我还有其他选择吗?
    • 将结果视为字符串并附加到"data",然后在您点击"end"时转换为缓冲区
    猜你喜欢
    • 2021-12-30
    • 2019-04-11
    • 2011-09-21
    • 2022-11-28
    • 2013-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多