2023微信小程序 图片内容安全检测实例总结 security.mediaCheckAsync

踩了很多次坑,终于在微信小程序中搞定了图片内容安全检测。

最开始看的以前的文章用的是老版本的图片安全检测,在开发者工具中是可以跑通的,但是到了真机调试就无法进行图片检测,后来提了个工单,才知道要用新版本的安全检测——security.mediaCheckAsync。发现以前也看到过这个接口,好像是因为是异步的传输结果,而且还是30分钟内给出结果,于是就放弃了,结果选了个老版本。哎!!

话不多说,我们开始:

参考文章:https://blog.csdn.net/weixin_55109830/article/details/127143342

本文主要根据参考文章进行,由于版本问题,其中有些坑还是要注意。

由于我们用的是新版本,其中有些参数已经改变,这一点要注意。

第一步:创建云函数

我在这里创建了imgcheck2这个云函数

首先要对云函数的config.json文件进行配置,引入我们要用的接口

{
  "permissions": {
    "openapi": [
      "openapi.security.msgSecCheck",
      "openapi.security.mediaCheckAsync"
    ]
  }
}

在index.js中进行调用接口

// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) // 使用当前云环境

// 云函数入口函数

exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()
  console.log(event)
  try {

      const result = await cloud.openapi.security.mediaCheckAsync({
          media_url: event.value,
          media_type: 2,
          version: 2,
          openid: wxContext.OPENID,
          scene: 3
      })

      return result

  } catch (err) {
      return err;
  }
}

注意接口中的参数较以前版本已经改变,且根据文档我们没有填写access_token这个参数

最开始还纳闷这个函数怎么写,查看文档后发现云函数是不用填写的。

最后将云函数进行上传(云端部署),并在云开发工具中添加云函数。

第一步完成。

第二步:创建消息推送

官方说是在30分钟内将结果推送,看着有点吓人,但实测一张图片在10秒内会有结果,甚至5秒也有可能。

我们首先需要一个函数来接收传过来的结果消息,我创建了receiveimgcheck这个云函数

配置文件无需改动,只要将主文件进行编写即可,这是我的代码

// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) // 使用当前云环境

// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()
  await cloud.database().collection('imgCheckResult').add({
    data:{
      traceid:event.trace_id,
      result:event.result.suggest
    }
  })
  
  
  return event
}

代码非常简单,结果返回到云函数后,将结果result和traceid保存到集合中。

好了接收的云函数有了,下面我们进行配置消息推送

盗用参考文章中的图,点击云开发中的设置、其他设置、推送模式改为云函数、点击添加消息推送,

消息类型选event 、事件类型选wxa_media_check、云函数选刚才创建的云函数。

OK,这样就配置完成了。

第三步 测试

下面是我的测试代码

wx.getFileSystemManager().readFile({
            // encoding:'ucs2',
            filePath:this.data.localFilesPath[nr],
            success(res){
              console.log(res)
              var buffer = res.data
              //传入云函数进行检测
              wx.cloud.callFunction({
                name:'imagecheck2',
                data:{
                  value:wx.cloud.CDN(buffer)
                },
                success:res=>{
                  console.log(res)  
                  
                  traceIds.push(res.result.traceId) 
                }
              })
            }
          })
        }

我将本地选取的图片进行读取,保存成buffer类型,用wx.cloud.CDN保存到CDN中,将图片链接传入云函数中,云函数嗲用成功后会返回给我们traceid,可以根据traceid来定位图片,等待几秒后我们就可以在接收云函数的日志中看到结果啦。

并且集合中也上传了结果和traceid

我们根据traceid可以定位到结果。

db.collection('imgCheckResult').where({
              traceid:traceIds[i]
            }).get({
              success: function(res) {
            }

大功告成,可能我的方法运行时间有点长,如果大家有更好的方案,可以在评论区交流。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值