使用云函数调用 security.imgSecCheck ,对图片进行鉴黄请求响应为:
result:{ errCode: 41005
|
云函数代码如下:
const cloud = require( 'wx-server-sdk' ) cloud.init(); // 云函数入口函数 exports.main = (event) => { console.log(event); return cloud.openapi.security .imgSecCheck({ media: { contentType: 'image/png' , value: event.img } }) .then(result => { return result; }) . catch (err => { return err; }) } |
调用代码如下:
uploadImg: function () { this .selectImg().then(img => { console.log(img); return this .imgSecCheck(img); }).then(res => { console.log( "success:" , res); }). catch (err => { console.log( "fail" , err); }) },
// 选择图片并转为 buffer selectImg: function () { return new Promise((resolve, reject) => { wx.chooseImage({ count: 1, sizeType: [ 'original' , 'compressed' ], success: function (res) { let params = { filePath: res.tempFilePaths[0] }; wx.getFileSystemManager() .readFile({ filePath: res.tempFilePaths[0], success: res => { console.log( "readSuccess:" , res); resolve(res.data); }, fail: err => { console.log( "readFail:" , err); reject(err); } }); }, }) }) }, // 调用云函数 imgSecCheck: function (img) { return wx.cloud.callFunction({ name: "imgSecCheck" , data: { img: img } }) }, |
media: {
contentType:
'image/png'
,
value: event.img
}
将value: event.img 改成: value: Buffer.from(event.img)
说实话,官方文档有点水
value: event.img 改: value: Buffer.from(event.img)
在官方文档基础上,以下自用代码正常:
// 云函数入口文件 const cloud = require('wx-server-sdk') cloud.init() // 云函数入口函数 exports.main = async (event, context) => { return cloud.openapi.security.imgSecCheck({ media: { contentType: 'image/png', value: Buffer.from(event.buffer) } }) }
小程序客户端:
addPic: function () { wx.chooseImage({ count: 1, sizeType: ['compressed'], sourceType: ['album', 'camera'], success: res => { const filePath = res.tempFilePaths[0]; if (filePath && filePath.size > 1024 * 1024) { wx.showToast({ title: '图片不能大于1M', icon: 'none' }) return; } wx.getFileSystemManager().readFile({ filePath: res.tempFilePaths[0], success: buffer => { wx.showLoading({ title: '图片检测中', }) wx.cloud.callFunction({ name: 'imgSecCheck', data: { buffer: buffer.data } }).then(res => { if (res.result.errCode == 0) { this.doUpload(filePath); } }).catch(err => { wx.hideLoading(); wx.showToast({ title: "图片含有违规内容", icon: "none", duration: 3000 }); }) } }) } }) },
以上代码看明白了,谢谢。
然后我再去文档中的security.imgSecCheck时,要在config.json要进行配置(如当前云函数文件没有config.json,可以自己新建一个),详情点这个链接(https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/openapi/openapi.html#%E4%BA%91%E8%B0%83%E7%94%A8)
{ "permissions": { "openapi": [ "security.imgSecCheck" ] } }
在云函数中使用云调用时,首先云函数中需要使用版本号至少 0.4.0 的 wx-server-sdk,建议 wx-server-sdk 始终保持最新,保证云函数目录下的 package.json 的 wx-server-sdk 字段为 latest,如本地安装依赖,请执行 npm install --save wx-server-sdk@latest。
最后把云函数进行上传,结果执行成功,返回以下内容:
success: {errMsg: "cloud.callFunction:ok", result: {…}, requestID: "..."} errMsg: "cloud.callFunction:ok" requestID: "..." result: errCode: 0 errMsg: "openapi.security.imgSecCheck:ok"
哦,终于看到一篇有用的小程序流文件处理的好文章
我也遇到这个问题了, 云端看日志输出, buffer是传上去了, 但是,也提示上面的这个问题。
问题还没解决,目前改用后台调用图片检测接口。
相同的问题,请问楼主解决了吗
代码很清晰,我也跟楼主发现了一样的问题,请问楼主如何解决的
楼主问题解决了没,我也是同样的问题,能看看你请求的代码码