前端传来base64码的图片,php怎么处理?

本文介绍如何在PHP中接收并处理前端通过Base64编码传递的图片。内容涉及将Base64字符串解码为二进制,保存为本地文件,以及相关的安全考虑和最佳实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    $bases = $_POST['img']; //图片流
    $bases_size = $_POST['size'] ? $_POST['size'] : 2; //图片大小,可动态限制,默认为2M
    $base64_image = str_replace(' ', '+', $bases);
    //post方式接收的数据, 加号会被替换为空格, 需要重新替换回来, 若不是post数据, 不需要执行
    if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $base64_image, $result)){
        //判断图片后缀
        $pic_ars = array('jpg','jpeg','png');
        if(!in_array($result[2],$pic_ars)){
            exit(json_encode(array('status'=>0,'message'=>'文件格式有误')));
        }else{
            //定义文件名称
            $picname = uniqid(); //这里会重复上传图片,如果不允许的话,可以给定特殊文件名称来判断,比如用户名
            $picdir=$picname.'.'.$result[2];
        }
        //判断大小
        $size_format = ceil((strlen($bases) - ((strlen($bases)/8)*2))/1024);
        if($size_format > $bases_size*1024){
            exit(json_encode(array('status'=>0,'message'=>'图片大小不能超过2M')));
        }
        //定义图片储存文件目录
        $dir = $_SERVER['DOCUMENT_ROOT'] . "/upload/".date('ymd');
        if (!is_dir($dir)){
            //如果不存在就创建该目录
            mkdir($dir,0777,true);
        }
        //图片名称
        $image_url = $dir.'/'.$picdir;
        //储存图片
        $img_url = '';//图片路径
        if (file_put_contents($image_url, base64_decode(str_replace($result[1], '', $base64_image)))){
            $img_url = $_SERVER['SERVER_ADDR']."/upload/".$picdir;
        }
        exit($img_url);
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值