难以将图像转换为Base64

时间:2018-05-23 10:37:35

标签: javascript node.js binary base64 tableau-server

在Node.js

中将图像转换为base64字符串时,我遇到了一个非常令人困惑的问题

这是我的示例代码:

app.get('/image', (req, res) => {
  ServerAPI.queryViewImage(options).then(image => {
    res.render('image', { image: Buffer.from(image, 'binary').toString('base64') });
  });
});

所以基本上,最重要的是这个块,我将图像响应转换为base64字符串:

 { image: Buffer.from(image, 'binary').toString('base64') }

实际上,我用Postman测试了我的API并且图像显示正确。然后,我使用在线转换器将图像转换为base64,并将代码包含在我的html / img src中,该代码有效。

然后我将Node.js和在线转换器生成的base64代码与同一API调用进行了比较 - 显然,存在差异。屏幕截图如下:

differences between Node.js response to base64 and image to base64

我缺少什么?为什么Node.js没有正确转换我的图像响应?

//编辑: 包括queryViewImage函数的代码。

//basically, this function connects to server and returns image response as promise. rp() is from request-promise library
const queryViewImage = (token, siteId, viewId) => {
    const options = {
        method: 'GET',
        url: `${url('sites')}/${siteId}/views/${viewId}/image`,
        headers: {
            'X-Tableau-Auth': token
        }
    };

    return rp(options)
        .then((response) => response)
        .catch((err) => err);
}

1 个答案:

答案 0 :(得分:1)

我找到了解决方案。希望将来会有人使用它。

因此,请求承诺库有一些默认编码。要删除它,我添加了编码'属性到选项对象并将其设置为null。如下所示

    const options = {
        method: 'GET',
        url: `${url('sites')}/${siteId}/views/${viewId}/image`,
        headers: {
            'X-Tableau-Auth': token
        },
        encoding: null
    };