使用場(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
}
}