接口开发中,好多时候图片的上传是通过先将图片转成二进制并生成Base64编码然后POST给API接口的,最近在帮客户开发阿里云的域名认证模板的接口,认证过程中需要上传证件,原本上传图片的这种API开发过好多,但今天怎么传,阿里云接口返回信息:“图片被损坏,请更新图片重新上传” ,研究来研究去,自己编码的base64没有错误,转成图片一切正常,没有办法吃饭,出去转了一圈,回家后细细研究下自己的这个函数,后来想会不会阿里要求的字符串不能分割呀,平时分割成一段段的,再转换成图片时是没有什么影响的,后来把分割的这个函数删除掉,重新提交了一个认证,几分钟后收到阿里云邮件,认证成功,到此可以确定就是分割造成的问题了,前面说这种分割对于再次转换成图片没啥影响,对于新网域名认证模板的证件提交这样分割也是没啥影响的,因为我一直用着的,话不多说,把函数分享给大家!
$img = '../../UserFiles/domainname/ali_20181127211537.jpg';
$base64_img = base64EncodeImage($img);
echo $base64_img;
function base64EncodeImage ($image_file) {
$base64_image = '';
$image_info = getimagesize($image_file);
$image_data = fread(fopen($image_file, 'rb'), filesize($image_file));
//chunk_split把字符串分割成一段段的了。不影响正常转换成图片,
//$base64_image = 'data:' . $image_info['mime'] . ';base64,' . chunk_split(base64_encode($image_data));
//新网可以直接用下面的这种chunk_split把字符串分割成一段段的了。
//$base64_image = chunk_split(base64_encode($image_data));
//阿里云只能用下面这种不能有任何分割的字符串POST数据给接口
$base64_image = base64_encode($image_data);
return $base64_image;
}