无法从base64上传文件,尽管它可以与文件系统一起使用

时间:2018-03-15 01:08:15

标签: node.js

我一直在为这个简单的问题苦苦挣扎...... 我正在尝试从网址上获取图片,将其发布到不和谐的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的经验,所以这可能很简单,但是我不知道数据类型会有很多麻烦......

希望有人可能会给我答案。

1 个答案:

答案 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);
});