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

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

作者: 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