收藏
回答

偶尔报错:fail invalid image url

框架类型 问题类型 终端类型 AppID 环境ID 基础库版本
小程序 Bug 工具 wx6487740b101242f0 hk-dev-3gj3cyhtdb95862c 2.16.0
// 调云函数的核心代码
let param = {
  api: 'businessLicense',
  data: {
    type: 'photo',
    imgUrl: url,
  }
}
wx.cloud.callFunction({
  name: 'ocr',
  data: param,
  fail(e) {
    console.log('云函数调用失败', name, param, e)
  },
  success: function (res) {
    console.log(res)
  }
})

// 云函数main方法
exports.main = async (event, context) => {
  switch (event.api) {
  case "businessLicense":
    return await cloud.openapi.ocr.businessLicense(event.data)
  case "idcard":
    return await cloud.openapi.ocr.idcard(event.data)
  default:
    return null
  }
}

// 控制台报错信息
Error: cloud.callFunction:fail -404011 cloud function execution error. 云函数执行错误

// 关键参数 url (其中xxx是隐私数据不方便透露)
url = https://xxx.oss-cn-chengdu.aliyuncs.com/xxx/418ce1ee47dc4bb8909ae6e97d331ed1.jpg?Expires=1619167326&OSSAccessKeyId=xxx&Signature=rTEpx153mq650m7%2Bg6YhVSkXhnE%3D

// URL设计说明
我们的图片不对外公开,所以要想访问,必须要被授权,所以才有Expire,Signature等签名相关的参数,有一定的有效期。
但我保证所有每次生成的url都可以正常访问,均能获取到图片。

// 我的排查结果
我这个BUG不是必现的,而是偶现。我把必现和偶现的URL做了对比发现:
云函数执行失败的时候,url中的Signature参数都带有“+”
没有带“+”的时候能正常执行云函数
(签名可能会生成“+”)

// 结论
可能是腾讯云函数那边判断传入的imgUrl参数校验的时候,写的不够合理,导致URL无效,但其实这个地址是能取到图片的。

// 验证方法
你们可以在正常的图片地址后面增加任意参数:
url = url + "?a=+"
或者是经过urlEncode后的
url = url + "?a=%2B"

希望官方能尽快解决这个BUG,否则我们的业务会收到影响,总不能让我们开放文件访问权限,不进行签名吧?
回答关注问题邀请回答
收藏

1 个回答

  • 游戏人生
    游戏人生
    2021-04-25

    额,你和另外2个人情况一样。。。

    2021-04-25
    有用
    回复
登录 后发表内容