nodejs获取的微信小程序二进制图片无法展示

我们使用微信官方提供的接口getwxacode获取了微信小程序二维码,但是,获取的二进制图片无论如何都没法展示出来。

调用微信官方接口的方法为:使用Nodejs包request,调用方法为;

// 获取小程序二维码
async queryQRCode(access_token: string) {
    try {
        return new Promise(async (resolve, reject) => {
            const params = {
                path: 'pages/card/index',
            }
            const url = `https://api.weixin.qq.com/wxa/getwxacode?access_token=${access_token}`
            request({
                url: `https://api.weixin.qq.com/wxa/getwxacode?access_token=${access_token}`,
                method: 'post',
                body: JSON.stringify(params),
                // encoding: null,
            }, async function(error, response, body) {
                let data = body
                var base64Img = "data:image/png;base64," + data.toString('base64');  // base64图片编码字符串
                resolve(base64Img)
            })
        })
    } catch(e) {
        console.log(e)
    }
}

刚开始,我们转base64的方式进行展示,图片展示不了。使用的如下方式:

let data = body
let base64Img = "data:image/png;base64," + data.toString('base64');  // base64图片编码字符串

后面,我们又将二进制保存成为图片,同样是展示不了。使用的方式如下:

fs.writeFile('test_wx.png', data, function(err) {
    console.log('err', err)
}) // 保存成图片

发现还是展示不了。

最后,发现是因为request会自动对返回的结果进行encoding。所以,我们只需要在request时,添加encoding: null即可。最终的实现方式如下:

// 获取小程序二维码
async queryQRCode(access_token: string) {
    try {
        return new Promise(async (resolve, reject) => {
            const params = {
                path: 'pages/card/index',
            }
            const url = `https://api.weixin.qq.com/wxa/getwxacode?access_token=${access_token}`
            request({
                url: `https://api.weixin.qq.com/wxa/getwxacode?access_token=${access_token}`,
                method: 'post',
                body: JSON.stringify(params),
                // encoding: null,
            }, async function(error, response, body) {
                let data = body
                var base64Img = "data:image/png;base64," + data.toString('base64');  // base64图片编码字符串
                resolve(base64Img)
            })
        })
    } catch(e) {
        console.log(e)
    }
}

完美解决。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值