上集说到图文安全的审核,展开讲了一下文字的审核,图片一笔带过。这集来看看图片在前后端的传输。
在做图片审核的时候,不管是微信自带的接口还是阿里的图片审核,都有一个核心宗旨。就是校验的图片,保证清晰的情况下,越小越好。为了达到这个目的,必须要处理图片压缩的问题,
做UGC内容,用户上传的图片,如果是手机拍的照片,基本会在5M以上,使用其他更高端的设备图片会更大。
以上是开发中面临的问题,下面来解决问题。
显然,可以从前端和后端两个方向去尝试解决压缩图片这个问题。
从后台的接口讲起吧,首先是微信自带的api,security.imgSecCheck。
cloud.openapi.security.imgSecCheck({
media: {
contentType: 'image/jpeg',
value: compressedBuffer
}
});
格式统一选择jpg,value需要的是文件的Buffer,一次检测一张图。我们就需要一个图片buffer的数组来做一个Promise.all 的操作。
查看一下图片的文件Buffer 可以用过 wx.getFileSystemManager() 的 readFile api来写:
readFileAsync(filePath) {
return new Promise((resolve, reject) => {
const fileSystemManager = wx.getFileSystemManager();
fileSystemManager.readFile({
filePath,
success(res) {
// buffer
resolve(res.data);
},
fail(res) {
reject("读取文件失败");
}
});
});
}
// 封装成promise 异步调用
const arrayBuffer = await that.readFileAsync(res.tempFilePath);
然后看下tempFilePath怎么去取好点,结合业务,用户上传的图片最终展示的话要是高清图,这里上传的时候就必须是 高清图也就是原图。
图片Buffer有了,照道理直接调用接口传给后台就好了,但是实际操作后发现一个新的问题,如果直接传多张图片的Buffer,接口传输的data大小严重超标了。官方也给出了解决方案,