收藏
回答

getWXACodeUnlimit返回的二进制保存到云存储

框架类型 问题类型 终端类型 AppID 基础库版本
小程序 需求 客户端 wx9361914a85ed5a7c 最新

- 需求的场景描述(希望解决的问题)

问题:接口返回的二进制如何转为文件并保存到云存储

流程:

1.小程序向云函数发送请求,请求云开发生成返回图片地址(在云存储的地址)

2.云函数接收到请求,请求获取accessToken  (已完成)

3.通过getWXACodeUnlimit得到返回的二维码(图片二进制内容) (已完成)

4.将二维码保存至云存储


- 希望提供的能力

将二维码保存至云存储 或 直接发送到云存储指定位置



回答关注问题邀请回答
收藏

2 个回答

  • 有志亲年
    有志亲年
    2018-10-29

    var rp = require('request-promise');//还需要npm install request


     


    //以下代码写在exports.main函数里
    async function request(url) {
        return new Promise(function (resolve) {
          rp(url)
            .then(function (data) {
              resolve(data);
            })
            .catch(function () {
              resolve({ err: 1 });
            });
        });
      }
     
      var createOpt = function (token, scene, page) {
        var options = {
          method: 'POST',
          uri: 'https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=' + token,
          encoding: null//一定要加这个!!!!,不然存进去乱码,试了好久才发现是这里的问题,发出来给大家节约时间
          body: {
            "scene": scene,
            "page": page
          },
          json: true // Automatically stringifies the body to JSON
        };
        return options
      }
     
     
        var options = createOpt('access_token自己获取', 'test=key&ffff=lalalla''pages/index/index')
        var fileStream = await request(options) 
     
        return await cloud.uploadFile({
          cloudPath: 'testCode3.png',
          fileContent: fileStream,
        })


    2018-10-29
    有用 2
    回复 6
    • 锦卓
      锦卓
      2018-10-29
      wx.cloud.uploadFile({  cloudPath: 'example.png', // 上传至云端的路径
        filePath: '', // 小程序临时文件路径
        success: res => {    // 返回文件 ID
          console.log(res.fileID)
        },  fail: console.error
      })

      官方文件给的是临时文件路径,这个还可以是二进制文件??


      2018-10-29
      回复
    • 有志亲年
      有志亲年
      2018-10-29回复锦卓

      直接在云函数里把二维码的二进制存到云储存里会自动保存为图片,你写的这个是小程序端的接口,在云函数中有云函数存到云储存的接口,看下面:

      https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-server-api/storage/uploadFile.html

      2018-10-29
      1
      回复
    • 锦卓
      锦卓
      2018-12-16回复有志亲年

      result['data'] = await synchronous_post(url,options).then(function (e) {

          return await cloud.uploadFile({

              cloudPath: 'demo2.png',

              fileContent: e.body

          })

      });

      我换成这个服务端的上传了,但报错了



      2018-12-16
      回复
    • 锦卓
      锦卓
      2018-12-16回复有志亲年

      const fileList = ['cloud://heart-8265bd.6865-heart-8265bd/img/code_mine.png'];

      var dd = await cloud.getTempFileURL({

          fileList,

      })

      dd = dd.fileList[0]['tempFileURL'];

      result['data']= await cloud.uploadFile({

          cloudPath: 'demo.png',

          fileContent: dd

      })

      我尝试了下这个方案,结果是可以上传的,虽然图片是损坏的,但文件确实生成了


      2018-12-16
      回复
    • 有志亲年
      有志亲年
      2019-12-06回复锦卓
      你这里的dd只是一个url,不是图片的元数据,文件肯定是损坏的了,dd可以是new Buffer(base64Data, 'base64'),base64Data是图片的base64编码
      2019-12-06
      回复
    查看更多(1)
  • 阿白
    阿白
    2018-10-29

    云函数里应该用的是server端的sdk,这个是支持传二进制的


    详见文档:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-server-api/storage/uploadFile.html




    2018-10-29
    有用 1
    回复 1
    • 锦卓
      锦卓
      2018-10-29

      谢谢了,晚点试试

      2018-10-29
      回复
登录 后发表内容