nodejs小程序码转存(egg.js)

基于网络上给出很多代码,结果却不尽如意,所以特写此篇文章

活不多说直接上代码

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

我是将图片上传到腾讯云存储桶,后返回网络地址,自己随意选择

猜你喜欢

转载自blog.csdn.net/JiangYuXuan1994/article/details/81347247
今日推荐