评论

腾讯的一小步,开发者的一大步:说一说Cloud.CDN

使用Cloud.CDN避开wx.cloud.callFunction的传输大小限制

最近在文档中偶然发现了这么一段,测试完之后,居然情不自禁的想要夸一下腾讯:

故事是这样的:

很久之前,我们小程序上有图片上传前做安全检测的需求,选择的是云函数的实现方案,图片压缩后直接以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的传输上限我已经不再关心了~

最后一次编辑于  2020-07-19  
点赞 4
收藏
评论

6 个评论

  • 白头翁
    白头翁
    10-31

    大佬 你是怎么拿到cdn返回的链接里的数据呀;我用了request请求,在模拟机上可以,但是到了真机就请求超时了;这个怎么解决呀;望大佬指点一下

    10-31
    赞同
    回复 1
    • Why not?
      Why not?
      11-05
      云函数里直接下载的,处理我也都是云函数里做的。你是把这个链接存下来使用了吗?这个链接是临时的,很快会过期。
      11-05
      回复
  • 沈煜
    沈煜
    2023-08-24

    如果参数是数组直接套用就可以了吗?另外楼主这个查看参数传递的界面是怎么调出来的呀,求指导一下

    2023-08-24
    赞同
    回复 4
    • Why not?
      Why not?
      2023-08-27
      这个云函数不支持数组呢,只能是文件的内容或者本地临时文件路径,你传参有点问题,去看下文档吧。开发工具的Network面板里有个Cloud标签页。
      2023-08-27
      回复
    • 沈煜
      沈煜
      2023-08-30回复Why not?
      参数选项里面有字符串和数组的,这2种是不需要提供链接参数的。而且我用CDN这样写法在开发工具中是可以正常使用的,但是真机就不行了
      2023-08-30
      回复
    • Why not?
      Why not?
      2023-09-01回复沈煜
      那我就不知道了,我帖子里的写法是我们线上在用的。
      2023-09-01
      回复
    • 乐在骑中
      乐在骑中
      03-08
      请问现在问题解决了吗
      03-08
      回复
  • echo
    echo
    2022-12-29

    这个cdn返回的临时图片地址直接传给云函数吗? 我看你的临时地址是带tem的,而传给云函数的地址是http://vweixinf.tc.qq.com***, 这个临时地址是怎么转换成后面的地址的?

    2022-12-29
    赞同
    回复 2
    • Why not?
      Why not?
      2022-12-29
      需要转换什么?这个是临时文件地址,大概半小时就不可用了,需要存储或本地处理你就自己下载下来。
      2022-12-29
      回复
    • Why not?
      Why not?
      2022-12-29
      你看看示例,这个云函数调用后得到的就是一个临时地址,这个临时地址是直接传给你自己的云函数的
      2022-12-29
      回复
  • James💤
    James💤
    2021-01-28

    违规的上传到CDN不用管吧

    2021-01-28
    赞同
    回复 1
    • Why not?
      Why not?
      2021-02-01
      应该不用管的,CDN不到半小时可能就把图片删掉了,检测是开发者自己的事
      2021-02-01
      回复
  • 浩
    2020-09-08

    大佬,拿到临时图片URL传到云函数,云函数那边怎么通过这个URL上传图片到云存储啊

    2020-09-08
    赞同
    回复 1
  • 一隅宇
    一隅宇
    2020-07-28

    请问一下 ,imgSecCheck云函数的media 参数的value类型是Buffer,那如何把 返回的临时图片URL转化为Buffer类型?

    2020-07-28
    赞同
    回复 9
    • Why not?
      Why not?
      2020-07-28
      2020-07-28
      2
      回复
    • 一隅宇
      一隅宇
      2020-07-28回复Why not?
      谢谢,我去研究一下
      2020-07-28
      回复
    • 一隅宇
      一隅宇
      2020-07-28回复Why not?
      可以麻烦您截个图吗,我这边复制进去提示axios is not defined
      2020-07-28
      1
      回复
    • Why not?
      Why not?
      2020-07-28回复一隅宇
      axios你得先安装 https://www.npmjs.com/package/axios
      2020-07-28
      回复
    • 一隅宇
      一隅宇
      2020-07-28回复Why not?
      嗯嗯,刚刚已经百度到了,现在可以用了,谢谢您
      2020-07-28
      回复
    查看更多(4)
登录 后发表内容