【你是大佬,点进去看看我的问题吧,你一看就是很会】我在小程序中获取照片并转换Base64(可以通过工具正常转换成选择图片),再提交到云函数,在其中调用:
const result = await cloud.openapi.security.imgSecCheck({
media: {
contentType: event.fileName?.toLowerCase().endsWith('.png') ? 'image/png' :
'image/jpeg',
value: buffer
}
});
权限也声明了:
{
"permissions": {
"openapi": [
"security.imgSecCheck",
"security.msgSecCheck",
"security.mediaCheckAsync"
]
}
}
但是最终经过重复测试发现无论提交什么图片都返回通过(包括涉黄图,经过测试发现照样返回通过)。
官方文档也没说这个方法被抛弃,说的正常可用。不知道是我的方式错还是咋的。我的云函数是:
const cloud = require('wx-server-sdk');
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV
});
exports.main = async (event, context) => {
try {
// Check if the file data is provided
if (!event.file) {
console.log('No image data received');
return {
code: 400,
msg: '未接收到图片数据'
};
}
// Convert base64 file to buffer
const buffer = Buffer.from(event.file, 'base64');
console.log('Buffer length:', buffer
.length); // Log the buffer length to check if the image data is correctly converted
// Check if the image data is empty
if (buffer.length === 0) {
console.log('Image data is empty');
return {
code: 400,
msg: '图片数据为空'
};
}
// Check file size (limit to 2MB)
if (buffer.length > 1024 * 1024 * 2) { // 2MB limit
console.log('Image size exceeds 2MB:', buffer.length); // Log the size of the image
return {
code: 400,
msg: '图片大小超过限制'
};
}
// Perform security check
try {
const result = await cloud.openapi.security.imgSecCheck({
media: {
contentType: event.fileName?.toLowerCase().endsWith('.png') ? 'image/png' :
'image/jpeg',
value: buffer
}
});
// Log the security check response for debugging
console.log('Security check response:', JSON.stringify(result));
if (result.errCode === 0) {
return {
code: 200,
msg: '检测通过'
};
} else {
console.log('Security check failed:', result);
return {
code: 500,
msg: '图片检测未通过',
data: result
};
}
} catch (secError) {
console.error('Security check error:', secError);
// Special handling for different error codes
if (secError.errCode === 87014) {
console.log('Image content violation detected');
return {
code: 500,
msg: '图片内容违规'
};
} else if (secError.errCode === -604102) {
console.log('Image format error detected');
return {
code: 500,
msg: '图片格式错误'
};
}
console.log('Unknown security check error:', secError);
return {
code: 500,
msg: '图片检测失败',
data: secError
};
}
} catch (err) {
console.error('Fatal error:', err);
return {
code: 502,
msg: '系统错误',
error: err.message
};
}
};
我希望使用相关的用户给个反馈,因为比较紧急。
再说一遍:小程序内选完图片后转成的base64内容绝对没有问题,可以正常转换成图片。
这个是旧接口已经不维护了,建议切换到新接口,可参考https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/sec-center/sec-check/mediaCheckAsync.html