Dinowritecode 2023-01-28 00:00 采纳率: 60%
浏览 38
已结题

ajax传值出现问题

我想做一份头像上传功能,前端用户裁剪好头像以后会返回base64格式的,但是我不想把base64格式的存入数据库,想把它转成png图片,但是程序写好了,就是出了问题,我把base64传回给后端PHP用的是jQuery的ajax,用post方式传递,类型为json,这个前端的base64保证没问题,我直接赋值给php文件中的变量可以转成图片,但是经过ajax传值后返回的数值转成图片就成了这个样子

img


我把ajax传值返回的base64亲手又赋值给php变量,结果也是那样,总得来说,就是ajax传值以前的数据能正常转成图片,传值以后的就无了,下面是我的代码。
前端js:


```javascript
 urlname = res.url  //这个urlname就是前端的base64编码的图片
        $.ajax({
            type:'post',
            url:'php/face.php',
            dataType:'json',
            data:'url=' + urlname,
            success:function(res){
                console.log(res.result)
            }
        })

后端PHP:
```php
<?php
$imgbase64 = $_POST['url']; //url就是前端图片的base64字符串
$info = explode(',',$imgbase64);
if($info[0] == 'data:image/png;base64'){
    upa($info[1]);

}else{
    echo 'no';
}
function upa($str){
    $pic = base64_decode($str);
    if($pic === false) exit('失败');
        $path = './'; //保存位置
        $picname = '1.png';   //文件名及文件尾缀
    if(file_put_contents($path.$picname,$pic)){
        exit('success');
    }else{
        exit('fail');
    }
}
$img['result'] = $imgbase64;
echo json_encode($img);
?>

求解决(╥╯^╰╥)

  • 写回答

3条回答 默认 最新

  • 有一只小精灵 2023-01-28 09:06
    关注

    在对图片进行base64编码的时候会加入前缀字符串,编码内会加入这些字符(data:image/png;base64,) ,解码之前需要先去掉这一串字符。

        function upa($str)
        {
            $path = './'; //保存位置
            $picname = '1.png';   //文件名及文件尾缀
    
            $match = preg_match('/^(data:\s*image\/(\w+);base64,)/', $str, $result);
            if (!$match) {
                exit('失败');
            }
            $base64_image = str_replace($result[1], '', $str);
            if (file_put_contents($path . $picname, base64_decode($base64_image))) {
                exit('success');
            } else {
                exit('fail');
            }
        }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 2月6日
  • 已采纳回答 1月29日
  • 创建了问题 1月28日

悬赏问题

  • ¥15 欧姆龙plc枕式包装机 ST编程
  • ¥15 为啥快手广告联盟的广告这么难出来
  • ¥15 k8s集群重启后,kubelet一直报systemctl restart kubelet.service "Failed to delete cgroup paths"
  • ¥15 微信小程序构建工具类发布到npm,install后报错
  • ¥15 amesim液压仿真问题
  • ¥15 MATLAB优化设计
  • ¥15 ANN预测模型 200大米
  • ¥20 优秀学生的问题 oj java
  • ¥15 scratch-gui 如何集成进 react native
  • ¥15 把全局悬浮窗改为局内悬浮窗