最近在文档中偶然发现了这么一段,测试完之后,居然情不自禁的想要夸一下腾讯:
故事是这样的:
很久之前,我们小程序上有图片上传前做安全检测的需求,选择的是云函数的实现方案,图片压缩后直接以Buffer的形式传递。刚上线的几个月,一切运行正常,可是突然某一天(几个月前)开始,陆续有用户反馈上传会失败,当然也不是100%失败,个别幸运儿还是可以成功的。排查发现,是小程序在调用云函数的时候报错了(为了写文章,异常都是最新截图的),
第一种形式的异常(安卓):errCode: -404012 polling exceed max timeout retry. 说“ 超过了超时重试的最大次数”,如果真的以为是暂时的网络不好或者云函数那边临时出了什么状况,等待你的将是现实的沉痛一击,因为它从此再也没有好过:
第二种形式的异常(iOS):errCode: -1 | errMsg: cloud.callFunction:fail Error: data exceed max size. 说“数据超限了”,意思是嫌弃传的图片太大了,恐怕这也是导致安卓上报超时的原因:
以前都是好的,突然从某一天开始就不行了,后来,终于在等待中明白,应该是腾讯收紧了cloud.callFunction的数据大小限制,再也没有放宽...
由于这个功能比较次要,用得也少,就一直没改,直到最近才腾出手来。本来已经决定要采取图片先临时传到COS,再把COS URL传给云函数的方案了,但是在做之前想搞明白callFunction的数据大小限制上限到底是多少,居然几十K的图片都传不了,以前的文档是啥也没写的,但出于习惯,我又翻了下文档,于是看到了那段让人惊喜的文字,它的意思是,我们准备要做的这个功能,腾讯用"wx.cloud.CDN"已经提供了!!!
跳到对应的文档链接,说是从2.12.0也就是最新版的基础库开始支持,虽然2.12.0现在占比只有60%多,但会一天天增加。
https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/utils/Cloud.CDN.html
那就来看看它的效果如何吧,调用超级简单:
调用结果如下,图片会先传到CDN,然后再拿返回的临时图片URL传给cloud.callFunction:
完美!callFunction的传输上限我已经不再关心了~
大佬 你是怎么拿到cdn返回的链接里的数据呀;我用了request请求,在模拟机上可以,但是到了真机就请求超时了;这个怎么解决呀;望大佬指点一下
如果参数是数组直接套用就可以了吗?另外楼主这个查看参数传递的界面是怎么调出来的呀,求指导一下
这个cdn返回的临时图片地址直接传给云函数吗? 我看你的临时地址是带tem的,而传给云函数的地址是http://vweixinf.tc.qq.com***, 这个临时地址是怎么转换成后面的地址的?
违规的上传到CDN不用管吧
大佬,拿到临时图片URL传到云函数,云函数那边怎么通过这个URL上传图片到云存储啊
不过现在一般都要求内容检测,检测的图片肯定要狠狠的压缩下,因为检测接口限制了图片大小。但业务上的图片不需要过度压缩,检测通过后直接原图或者稍微压缩下上传。
请问一下 ,imgSecCheck云函数的media 参数的value类型是Buffer,那如何把 返回的临时图片URL转化为Buffer类型?
axios({
method: 'get',
url: imageUrl,
responseType: 'arraybuffer'
}).then(async res => {
//res.data就是你要的buffer
})