美文网首页
微信小程序使用云调用多图片违规验证

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

作者: guotanxiangg | 来源:发表于2020-04-26 15:48 被阅读0次

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

流程

选择图片 -》获取图片路径 -》 读取图片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

相关文章

网友评论

      本文标题:微信小程序使用云调用多图片违规验证

      本文链接:https://www.haomeiwen.com/subject/ojqjwhtx.html