我一直在为这个简单的问题苦苦挣扎...... 我正在尝试从网址上获取图片,将其发布到不和谐的webhook。
request.get(options, (res, err, base64Picture)=>{
}).pipe(fs.createWriteStream(filename)).on('close', ()=>{
upload(fs.readFileSync('./' + filename))
});
此功能按预期工作,但会创建一个无用的tmp文件。 我想获取base64字符串并将其转换为文件格式,所以我尝试这样做:
request.get(options, (res, err, base64Picture)=>{
upload(Buffer.from(base64Picture, 'base64'), filename);
})
这个根本不起作用。我试图记录两个缓冲区,它们确实不同。那是我无法得到的。我没有很多来自nodejs的经验,所以这可能很简单,但是我不知道数据类型会有很多麻烦......
希望有人可能会给我答案。
答案 0 :(得分:0)
在您发布的代码中,base64Picture
很可能是a UTF-8 string,这不是您想要的。您需要二进制Buffer
,因此请在请求选项上设置encoding: null
。然后,您可以在缓冲区上调用.toString('base64')
将其转换为base64字符串。
例如,这对我有用:
const options = {
url: 'https://i.imgur.com/8m8GoJu.jpg',
encoding: null // <----- important
};
request.get(options, (res, err, picture) => {
// now picture is a Buffer
const base64String = picture.toString('base64');
// use base64String as desired...
// upload(base64String, filename);
});