收藏
回答

开发者工具调试没问题,手机上预览以及真机调试调用云函数结果不符合预期

框架类型 问题类型 终端类型 AppID 环境ID 基础库版本
小程序 Bug 微信安卓客户端 wx5e95e21a1926f580 prod-8gwcnkkga0cf07c5 2.25.3

https://developers.weixin.qq.com/miniprogram/dev/framework/security.imgSecCheck.html

我有一个云函数用来检测图片内容合法性,在开发者工具上上传违禁图片能正常返回87014的errCode从而删除图片,不过在手机上预览或者真机调试的时候同一张违规图片返回的errCode一直是0。看请求日志都是调用成功的状态,所以不知道问题原因

云函数代码:

// 云函数入口函数
exports.main = async (event, context) => {
    const wxContext = cloud.getWXContext()
    
      try {
        const result = await cloud.openapi.security.imgSecCheck({
          media:{
            contentType:event.media.contentType,
          	value:Buffer.from(event.media.buffer,event.media.encode)// Buffer.from()是必须的
          }
        })
        // result 结构
        // { errCode: 0, errMsg: 'openapi.templateMessage.send:ok' }
        return result
      } catch (err) {
        // 错误处理
        // err.errCode !== 0
        return err
      }
}


调用方式

async imageCheck(tempImagePath, callback) {
  //-------------
  let _this = this;
  				
  let tempFilePathCompressed = tempImagePath;
  console.log("------ image to check ",tempFilePathCompressed)
  wx.getFileSystemManager().readFile({
  	filePath: tempFilePathCompressed, // 压缩图片,然后安全检测
  	encoding: 'base64',
  	success: buffer => {
  		uni.showLoading({
        	title: '加载中...'
        });
        							
        //这里是 云函数调用方法
        wx.cloud.callFunction({
       		name: 'image_check', // 这里是咱们创建的云函数名称 
        	data: {
         		media: {
                		contentType: 'image/jpeg',
                		buffer: wx.base64ToArrayBuffer(buffer.data),
                		encode: "base64"
                	}
                },
               	complete(res) {
               		console.log("---- buffer:"+ buffer.data.byteLength);
                	console.log(res)
                	uni.hideLoading();
                	if (res.result.errCode == 0) { // 如果图片代码返回87014说明此图片是有问题的
              			_this.validPicNum +=1
              			callback(tempImagePath); // 这里我调用了一个裁剪图片的代码,就不贴出来了, 你可以将此方法的内容转移到chooseImage方法中,而不需裁剪图片
                	} else {
                        	const num = _this.filePathsList.findIndex(v => v.url === tempImagePath);
                    		_this.filePathsList.splice(num, 1);
                  		return uni.showToast({
              				title: "违规图片已删除",
            				});
          		}
          	}
          })
    }
    })
    return 
          				
 }


最后一次编辑于  2022-08-31
回答关注问题邀请回答
收藏

1 个回答

  • 跨商通
    跨商通
    2022-08-31

    换一张很小的图片测试一下。

    2022-08-31
    有用 1
    回复 1
    • YY-See
      YY-See
      2022-09-01
      还是不行,原本才200kb,换了50kb的还是识别不出来违规图片
      2022-09-01
      回复
登录 后发表内容