为客户开发触屏版的头像上传功能时遇到这个问题,这个问题困扰了好几天。反复的打印localResizeIMG压缩后的base64的代码和通过mui.post方法提交到后端的base64数据。然后通过比对发现post过来的base64代码和localResizeIMG压缩过的能显示的base64代码是有差异的。主要是差别如下:
localResizeIMG的base64代码中是 +/ 而post到后端打印出来的是 + 也就是说部分+/ 被替换成+了。具体的问题没有再深入研究。这个情况遇到问题是,如果图片比较小都没问题,如果原始图片超过比如500kb(这个和localResizeIMG压缩比例有关系,这里就因人而异了),就容易出现上传到后台的图片是不完整的,有损的。甚至是黑图。
OK,解决方法来了。
在post之前,将base64的代码转成数组。如下:
mui(".member_from").on("tap","button",function () {
var avatar_size = document.getElementById("avatar_photo").value;
var avatar = document.getElementById("avatar_show").src;
avatar = avatar.split("/");
mui.post('后端地址',{avatar:avatar,imgsize:avatar_size},function(data){
if (data.state==false) mui.alert('原因是什么什么什么', '操作失败!');
},'json');
});
后端处理。这个做开发的就很容易了。一句话的问题:
$base64_image_contents = $_POST["avatars"];//提交过来的是数组
$base64_image_content=implode('/',$base64_image_contents);//数组转成字符串
后面base64转图片的这个就不发了。坛子里很多,搜下大把。
不知道是不是图片太大,造成base64代码过大而造成的图片受损的问题。总之,这个解决方案轻松搞定很多大图。
3 个评论
要回复文章请先登录或注册
1***@qq.com
所谓
祺佑