基于网络上给出很多代码,结果却不尽如意,所以特写此篇文章
活不多说直接上代码
const request = require('request-promise');
const fs = require('fs');
const COS = require('cos-nodejs-sdk-v5');
const cos = new COS({
AppId: '********',
SecretId: '***************',
SecretKey: '**************',
});
async getWXCodeUrl(scene, url) {
let appid = '**********';
let appsecret = '***********';
const options = {
url: 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' + appid + '&secret=' + appsecret,
method: 'GET'
};
let sessionData = await request(options);
sessionData = JSON.parse(sessionData);
let access_token = sessionData.access_token;
let name = this.app.config.baseDir + '/app/public/images/' + scene + '.jpg';
await this.creatWXCode(name, access_token, scene, url);
let uploadurl = name;
let uploadImg = await this.uploadImgToCloud(scene, uploadurl);
let picUrl = uploadImg.Location;
if (picUrl.indexOf('https://') == (-1)) {
picUrl = 'https://' + picUrl;
}
return picUrl;
}
/**
* 请求生成二维码
*/
async creatWXCode(name, access_token, scene, url) {
return new Promise(function (resolve, reject) {
let httpStream = rp({
url: 'https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=' + access_token,
method: 'POST',
body: JSON.stringify({
scene: scene,
page: 'pages/index/index'
})
})
let writeStream = fs.createWriteStream(name);
httpStream.pipe(writeStream)
httpStream.on('response', (response) => {
console.log('response headers is: ', response.headers);
});
let totalLength = 0;
httpStream.on('data', (chunk) => {
totalLength += chunk.length;
console.log('recevied data size: ' + totalLength + '字节');
});
下载完成
writeStream.on('close', () => {
console.log('download finished');
resolve()
});
});
}
/**
* 上传到腾讯云
*/
async uploadImgToCloud(scene, name) {
return new Promise(function (resolve, reject) {
scene = scene + '.jpg';
let params = {
Bucket: '*********',
Region: '*********',
Key: scene,
FilePath: name,
AsyncLimit: '2'
};
cos.sliceUploadFile(params, function (err, data) {
if (err) {
console.log(err);
} else {
fs.unlinkSync(name);
resolve(data)
}
});
});
};
我是将图片上传到腾讯云存储桶,后返回网络地址,自己随意选择