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日

悬赏问题

  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改