request得到的数据如何保存成Buffer?

request('http://xxx/ab.jpg', function (error, response, body) {

    if (!error && response.statusCode == 200) {
        var buffer = new Buffer(body);
        }
})
    

这样写是不行的
请问应该怎样去写呢?

阅读 8.8k
2 个回答

看你写的是要讲图片Buffer出来。下面举例做一个示例:

比如要请求我的头像地址:https://sfault-avatar.b0.upaiyun.com/453/230/453230058-573ffdd5eef2b_huge256

var request = require('request');
var fs = require('fs');

var url = "https://sfault-avatar.b0.upaiyun.com/453/230/453230058-573ffdd5eef2b_huge256";
var options = { 
    url: url,
    encoding: null
};
request(options, function(error, response, buffer) {
    if (error) {
    }
    
    console.log(typeof(buffer));

    fs.writeFile('avatar.png', buffer, function(err) {
        if (err) {
        }
    }); 
});

你目前遇到的问题,主要是返回的是一个String类型的字符串,采用了默认编码格式UTF-8。在request官网介绍 中,指出request(options, callback)部分中的options设置的encoding

encoding - Encoding to be used on setEncoding of response data. If null, the body is returned as a Buffer. Anything else (including the default value of undefined) will be passed as the encoding parameter to toString() (meaning this is effectively utf8 by default). (Note: if you expect binary data, you should set encoding: null.)

因此,你将encoding设置为null后,request会直接返回Buffer类型的,即:

var options = { 
    url: url,
    encoding: null
};

希望以上可以帮到你。

buffer.write(string, [offset], [length], [encoding])
推荐问题
宣传栏