评论

图片检查云函数imgSecCheck 踩坑指南

同一张图片同一压缩率华为手机压缩后与其他手机大小不一致,因此压缩后的图片太大以至于云函数图片检查太慢,因此采用CDN上传图片,用CDN地址作为云函数参数

	  //小程序客户端代码	
          wx.chooseImage({
		  	count:'1',
		  	sizeType: ['compressed'],
			  sourceType: ['album', 'camera']
		  }).then((res)=>{
			  	wx.showLoading();
				 let opt= {src:res.tempFilePaths[0], quality:5}
				 return wx.compressImage(opt);//压缩图片发送至CDN暂存
			}).then((res)=>{
				 let cdnUrl=wx.cloud.CDN({  
					type: 'filePath',
					filePath: res.tempFilePath,//压缩图片发送至CDN暂存
				});
				 let opt={
					name:'imgSecCheck',
					data:{
						imgcontent: cdnUrl
					}
				};
				return wx.cloud.callFunction(opt) //调用云函数检查图片是否合法
			}).then((res)=>{
				wx.hideLoading();
				if (res.result.errCode == 0) {
					wx.showModal({
						title: '提醒',
						content: '检查成功!',
						showCancel: false
					}) 
					//todo 上传图片
				}else{
					wx.showModal({
						title: '提醒',
						content: '违规图片!',
						showCancel: false
					})
				}
			}).catch((err)=>{
				console.error(err);
				wx.hideLoading();
				if(err.errMsg!='chooseImage:fail cancel'){
					wx.showModal({
						title: '提醒',
						content: '出错了请稍后再试!',
						showCancel: true
					})
				}
			});


//图片检查云函数定义

const cloud = require('wx-server-sdk')
const axios = require('axios');
cloud.init()

exports.main = async (event, context) => {
  let buffer=null;
// 下载CDN图片进行检查
  await axios({
    method'get',
    url: event.imgcontent,
    responseType'arraybuffer'
  }).then(res => {
     buffer=res.data;
  })
  try{
    return await cloud.openapi.security.imgSecCheck({
      media: {
        contentType'image/png',
        value:buffer
      }
    })
  }catch(e){
    return e;
  }
}
最后一次编辑于  2020-09-15  
点赞 2
收藏
评论
登录 后发表内容