微信小程序使用云调用多图片违规验证

使用场景:评论是多图片上传验证图片是否违法违规

流程

选择图片 -》获取图片路径 -》 读取图片data -》 验证图片

api

security.imgSecCheck 校验一张图片是否含有违法违规内容。

wx.chooseImage(Object object) 从本地相册选择图片或使用相机拍照

wx.getFileSystemManager 获取全局唯一的文件管理器

FileSystemManager.readFile(Object object) 读取本地文件内容

获取图片

data: {
    images: []
}
// 获取图片
getImages () {
    let that = this
    wx.chooseImage({
      count: 1,
      sizeType: ['original', 'compressed'],
      sourceType: ['album', 'camera'],
      success (res) {
        // tempFilePath可以作为img标签的src属性显示图片,tempFilePaths是个图片路径数组
        const tempFilePaths = res.tempFilePaths
        that.checkImage(tempFilePaths)
      }
    }) 
}

验证图片是否违规

  • 验证图片,参数为图片地址数组验证多张图片,有一张违规,提示内容违规,所以这里我们将用到promise.all()
  • 将每张图片执行异步调用云函数,生成一个promise数组
  • 类似 [promise1,promise2,promise3]

验证图片需要读取图片二进制流,用到wx另一个api

wx.getFileSystemManager 获取全局唯一的文件管理器
FileSystemManager.readFile(Object object) 读取本地文件内容

使用文件管理器读取图片

  • 注意这里encoding需要设置为base64

checkImage (images) {
    let pList = []
    images.forEach((item,i) => {
        pList[i] = return Promise((resolve, reject) => {
            const fs = wx.getFileSystemManager()
            fs.readFile({
                filePath: item,
                encoding: 'base64',
                success: function (res) {
                    wx.cloud.callFunction({
                        name: 'checkImage',
                        data: {
                            type: 'image/jpg',
                            value: res.data
                        }
                    }).then(res => {
                        if (res && res.result && res.result.errCode === 87014) {
                            wx.showToast({
                                title: '内容违规',
                                icon: 'none'
                            }) 
                            reject(false); // 违规
                        } else {
                          
                            resolve(true); // 正常
                        }
                    }).catch(err => {
                        resolve(true) //检查失败,都按正常算
                    })
                }
            })
        })
    })
    // 通过promise.all 来判断是否有违规
    promise.all(pList).then(
        // 上传图片正常
    ).catch(
        // 上传图片违规
    )
}

检验图片云函数

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

cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})

// 云函数入口函数
exports.main = async (event, context) => {
  try {
    const result = await cloud.openapi.security.imgSecCheck({
      media: {
        contentType: event.type,
        value: Buffer.from(event.value, 'base64')
      }
    })
    return result
  } catch (err) {
    return err
  }
}

转自 https://juejin.im/post/5ea5293f6fb9a03c763d257a

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 微信小程序在无论在功能、文档及相关支持方面,都是优于前面几种微信账号类型,它提供了很多原生程序才有的接口,使得我们...
    未央大佬阅读 6,824评论 0 12
  • 微信小程序在无论在功能、文档及相关支持方面,都是优于前面几种微信账号类型,它提供了很多原生程序才有的接口,使得我们...
    伍华聪_开发框架阅读 5,505评论 0 53
  • 又又又有新需求了,这次又有上传七牛云的需求了,从H5换成了小程序,又探了一次坑。 思路一致 1. 首先,获取Tok...
    hengking阅读 3,332评论 0 0
  • 最近由于公司需求要做小程序开发,而且做h5的前端同事现在都很忙,所以我们移动开发就开始学习这个微信小程序了,...
    无沣阅读 5,557评论 1 4
  • 点击查看原文 Web SDK 开发手册 SDK 概述 网易云信 SDK 为 Web 应用提供一个完善的 IM 系统...
    layjoy阅读 14,740评论 0 15