图片处理类的微信小程序如何通过官方的安全审核?

背景介绍

之前做了一个图片处理类的小程序,一开始运行的好好的,后来微信官方通知我说必须做安全审核,通知如下:
在这里插入图片描述
做不要紧,问题是微信推荐的官方接口响应时间在30分钟以内,作为一个工具类的小程序不可能让客户等待这么长的时间
在这里插入图片描述
怎么既可以通过官方审核又可以让客户体验不至于太差呢?于是有了这篇文章。

通过前期调研,我发现微信小程序还真提供了一个同步响应的接口,检测一次用时大概2-3秒
security.imgSecCheck
但是这个接口使用的条件有一点苛刻:
1.图片大小得在50k左右
2.图片尺寸不超过750px x 1334px

方案

于是方案就有了,在对图片进行正式处理之前,先进行一次预处理–
1.将图片的大小和尺寸压缩至合适的参数
2.将预处理后的图片喂入官方接口security.imgSecCheck
3.获取处理结果
3.1若结果为合法图片,则继续进行下一步处理
3.2若结果为非法图片,则提示换图
3.3若结果为接口异常,则提示稍等再继续

遇到的一些问题

1.预压缩后取不到图像地址返回值

/*************原图预压缩开始******************* */
          var res_tempfile=await that.preZip(res.tempFiles[0].tempFilePath,200,200,40)
          console.log('预压缩图片地址',res_tempfile)
/*************原图预压缩结束******************* */

其中res.tempFiles[0].tempFilePath为从wx.chooseMedia读取到的图片地址,之后两个200分别代表预压缩后图片的宽度和高度,40代表预压缩后的图像大小不大于40KB
根据逐字分析之后发现,preZip函数并没有被定义为promise类,而是定义成了普通类,所以使用await无法获取返回值。
于是在函数定义开头加上:

preZip:async function(tmp_src,tmp_imgprowidth,tmp_imgproheight,tmp_imgprosize){//依次为原图地址,期待宽度,期待高度,期待大小
    return new Promise<string>((resolve, reject) => {

完美解决问题!

2.云函数安全检测无法实时返回数据

大概会有2-3秒的延迟,为了避免用户不明情况多次点击,将检测结果的状态分为三种:
0代表图片合法
1代表图片违法
2代表接口异常或结果未出需稍后重试
同时为了避免每次检测受上次影响,每次替换图片时将检测结果都默认为2,检测结果出具后修改该值。
最后,根据检测结果进行不同的处理过程。检测过程如下:

 /********云函数安全检测开始*********/
          var res_security=await that.securityDetect(res_tempfile);
          that.setData({
            security:res_security
          })
 /********云函数安全检测开始*********/

3.云函数无法识别违规图片

明明使用了await,但是云函数好像不起作用,违规图片也进行处理了。最后发现问题来源于两个地方:
1.默认初始为合法图片,所以在没有得到返回结果时默认为图片合法,导致违规图片进行了处理。
解决方法:
修改默认值为接口异常即可。
2.对于图片尺寸/大小不符合要求的图片,security.imgSecCheck将返回“接口异常”。
解决方案:
增加图片的预处理过程,同时针对接口异常情况提示用户稍后重试。

4.云函数部署失败/更新失败

开发者工具的bug,当我删除原有环境,新建云环境以后,原环境里的云函数将无法部署/更新,及时修改了新环境的ID也不行。
解决方案:
在当前的云环境目录下新建一个云函数文件夹,并把原云函数的内容copy到新建的云函数文件夹里(包括
index.js package.json config.json)

代码

点击查看源码,欢迎star!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值