react-native图像上传时将图像转成Base64并作大小限制后上传
背景
在做APP注册时,需要有选取图像并上传的步骤,于是便用到了react-native-image-picker,顺带一提的是它的Link很特殊,笔者是用的手动的方式才能使用的。
使用方式是ImagePicker.showImagePicker(options, callback)。
在使用是发现服务端返回了413,查了一下是nginx有上传文件大小限制。修改一下服务端设置就好了。
思前想后,觉得作为客户端,也应该对图像数据进行大小检验。
解析
我们使用react-native-image-picker是用的callback来对拿到的图像进行操作的。response对象的属性值在ReadMe中有提到。拿到response.data。
使用typeof(response.data)发现是String,输出发现是Base64的字符串,那就很好解决了。
ImagePicker.showImagePicker(options, (response) => {
if (response.didCancel) {}
else if (response.error) {}
else if (response.customButton) {}
else if (parseInt( response.data.length / 1048576 ) >= this.MaxSize) { //1048576 = 1024 * 1024
this.alertMessage('提示:','图片太大,请选择一张更小的图')
}
else {
//later
}
});
在对数据进行操作前,检验它的大小,便可以在客户端完成对图像文件大小的限制了。
response.data.length/1048576 得到的是字符串的大小,如3.7729485740M。