小程序利用云开发实现图片安全检测(imgSecCheck,msgSecCheck)
最近在做一款拍照的小程序,审核时被拒绝,需要增加云安全检测,使用的方法流程是,小程序使用云上传,云平台下载图片在云检测,将检测结果返回给小程序,小程序通过结果来判断是否安全
// 小程序端
// 主方法
handleCamera: function () {
let that = this
this.selectImg().then(fileImg => {
wx.showLoading({
title: '分析中',
mask: true
})
wx.cloud.uploadFile({
cloudPath,
filePath: fileImg,
success(res) {
wx.cloud.callFunction({
name: "imgSecCheck",
data: {
fileID: res.fileID
}
}).then(res => {
if (res.result.errCode !== 0) {
wx.showToast({
title: '违规图片,请重新上传',
icon: 'none'
})
}
else {
wx.hideLoading()
that.jumptoresult()
}
}).catch(err => {
wx.showToast({
title: '违规图片,请重新上传',
icon: 'none'
})
console.log(err)
})
},
fail(err) {
console.log(err)
wx.showToast({
title: '上传失败',
icon: 'none'
})
}
});
})
},
// 选择图片
selectImg: function () {
if(!this.data.isShowAdv){
return
}
let that = this
return new Promise((resolve, reject) => {
wx.chooseImage({
count: 1,
sizeType: ["compressed"],
sourceType: ["camera", "album"],
success: function (chooseFile) {
that.setData({
imagex: chooseFile.tempFiles[0].path,
})
resolve(chooseFile.tempFilePaths[0])
},
})
})
}
// 云开发端
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init()
// 云函数入口函数
exports.main = async(event, context) => {
const fileID = event.fileID
const res = await cloud.downloadFile({
fileID: fileID,
})
const buffer = res.fileContent
try {
var result = await cloud.openapi.security.imgSecCheck({
media: {
contentType: 'image/png',
value: buffer
}
});
return result
} catch (err) {
return err
}
}
试了一些其它方案没走下去,我列举下大家可以参考
1、用户拍完照使用云安全检测报错提示 data maxsize 等等 因为云安全检测的大小限制为1M 我们手机多数拍出来都比较大,所以更换了下面那种方案
2、使用canvas画图把图片搞小,然后在安全检测 失败告终,图片小了可以上传,但安全检测也识别不出来了
还有一个云文本安全检测,用法同云安全图片比图片还简单一些,大家改改就行,需要帮助也可以私聊我
下面是成品,可扫码测试