微信小程序使用云調(diào)用多圖片違規(guī)驗(yàn)證

使用場(chǎng)景:評(píng)論是多圖片上傳驗(yàn)證圖片是否違法違規(guī)

流程

選擇圖片 -》獲取圖片路徑 -》 讀取圖片data -》 驗(yàn)證圖片

api

security.imgSecCheck 校驗(yàn)一張圖片是否含有違法違規(guī)內(nèi)容。

wx.chooseImage(Object object) 從本地相冊(cè)選擇圖片或使用相機(jī)拍照

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

FileSystemManager.readFile(Object object) 讀取本地文件內(nèi)容

獲取圖片

data: {
    images: []
}
// 獲取圖片
getImages () {
    let that = this
    wx.chooseImage({
      count: 1,
      sizeType: ['original', 'compressed'],
      sourceType: ['album', 'camera'],
      success (res) {
        // tempFilePath可以作為img標(biāo)簽的src屬性顯示圖片,tempFilePaths是個(gè)圖片路徑數(shù)組
        const tempFilePaths = res.tempFilePaths
        that.checkImage(tempFilePaths)
      }
    }) 
}

驗(yàn)證圖片是否違規(guī)

  • 驗(yàn)證圖片,參數(shù)為圖片地址數(shù)組驗(yàn)證多張圖片,有一張違規(guī),提示內(nèi)容違規(guī),所以這里我們將用到promise.all()
  • 將每張圖片執(zhí)行異步調(diào)用云函數(shù),生成一個(gè)promise數(shù)組
  • 類似 [promise1,promise2,promise3]

驗(yàn)證圖片需要讀取圖片二進(jìn)制流,用到wx另一個(gè)api

wx.getFileSystemManager 獲取全局唯一的文件管理器
FileSystemManager.readFile(Object object) 讀取本地文件內(nèi)容

使用文件管理器讀取圖片

  • 注意這里encoding需要設(shè)置為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: '內(nèi)容違規(guī)',
                                icon: 'none'
                            }) 
                            reject(false); // 違規(guī)
                        } else {
                          
                            resolve(true); // 正常
                        }
                    }).catch(err => {
                        resolve(true) //檢查失敗,都按正常算
                    })
                }
            })
        })
    })
    // 通過promise.all 來判斷是否有違規(guī)
    promise.all(pList).then(
        // 上傳圖片正常
    ).catch(
        // 上傳圖片違規(guī)
    )
}

檢驗(yàn)圖片云函數(shù)

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

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

// 云函數(shù)入口函數(shù)
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
  }
}

轉(zhuǎn)自 https://juejin.im/post/5ea5293f6fb9a03c763d257a

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容