小程序实现二维码图片Buffer下载
业务场景:小程序端生成小程序二维码(官方api生成是图片buffer格式),然后对此图片进行下载分享等操作
- 安装buffer
npm install buffer
- wxQrcode.js
let Buffer = require("../miniprogram/miniprogram_npm/buffer/index").Buffer
const {request
} = require('./index') // 这里是我封装的wx.request请求接口// 分享卡片
export function getQrcode(dataInfo) {// 重点是responseType设置为arraybufferrequest(dataInfo, true, true, '加载中...', 2000, 'arraybuffer').then((res) => {console.log(res)}).catch(data => {if (data.byteLength < 100) {Toast('二维码获取失败,请重试')return}const imgBuffer = new Buffer.from(data);const imgBase64 = imgBuffer.toString('base64').replace(/[\r\n]/g, "")const dataImagePrefix = `data:image/jpeg;base64,`const qrCodeImg = `${dataImagePrefix}${imgBase64}`doShare(qrCodeImg)})
}// 执行分享
export function doShare(base64Data) {wx.showLoading({title: '准备分享中...'});const tempFilePath = base64ToTempPath(base64Data);if (!tempFilePath) {wx.hideLoading();wx.showToast({title: '图片处理失败',icon: 'none'});return;}wx.showShareImageMenu({path: tempFilePath,success: () => {wx.hideLoading();},fail: (err) => {wx.hideLoading();}});
}// base64转临时路径
export function base64ToTempPath(base64Data) {try {const imageData = base64Data.replace(/^data:image\/\w+;base64,/, "");const timestamp = new Date().getTime();const filePath = `${wx.env.USER_DATA_PATH}/share_${timestamp}.png`;const fs = wx.getFileSystemManager();fs.writeFileSync(filePath, imageData, 'base64');return filePath;} catch (error) {console.error('base64转临时路径失败:', error);return null;}
}module.exports = {getQrcode
}