PHP处理base64编码字符串

本文介绍如何在PHP中将前端传来的Base64编码的图片字符串转换为图片文件,并将其上传到阿里云OSS。首先,通过Yii框架接收Base64字符串,然后转换并保存为本地图片,最后上传至OSS并删除本地文件。

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

  • 接收前端传过来的base64编码后的字符串, 如果是json字符串, 那么PHP使用file_get_contents('php://input'); 来接收. 本次这里是以post传参的形式传base64字符串.
    $photo = \Yii::$app->request->post('photo', '');    //yii接收,photo变量存储的即base64字符串

     

  • 设置base64转成图片后要保存的文件名 以及 路径
    $filename = date('YmdHis').rand(1111,9999).'.png';
    $path = \Yii::$app->basePath.'/web/temp';
    if(!is_dir($path)){
    mkdir($path, 0777, 'true');
    }
    $imagePath = $path.'/'.$filename;  //文件的完整路径(本地的)

     

  • 判断是否有逗号, 如果有就截取后半部分
    if(strstr($photo, ',')){
        $photo = explode(',', $photo);
        $photo = $photo[1];
    }

     

  • base64生成图片
    $r = file_put_contents($imagePath, base64_decode($photo));   //$r接收的是返回的字节数, 至此本地成功生成图片

     

  • 接下来是将本地图片保存至oss上, 并删除本地图片
    $photo_url = $this->uploadImg($imagePath);  //调用上传oss方法
    //删掉本地图片
    unlink($imagePath);

    上传oss方法如下(需要下载ossSDK并引入,此处省略)

    public $access_key = '你的access_key';
    public $secret_key = '你的secret_key';
    public $domain = 'http://oss-cn-shenzhen.aliyuncs.com';  //选距离最近的域名
    public $bucket = '你的bucket';
    //$localdir是图片的本地路径, 也就是$imagePath public function uploadImg($localdir='') { include \Yii::$app->basePath.'extensions/aliyun-oss-php-sdk-2.2.4/autoload.php'; //将ossSDK包放在extensions目录下, 然后引入autoload.php, 还有命名空间. 即可使用. //把文件上传到oss上 try{ $object = md5(time().uniqid()).'.png'; $ossClient = new OssClient($this->access_key, $this->secret_key, $this->domain); $exist = $ossClient->doesObjectExist($this->bucket, $object); if(!$exist){ $ossClient->uploadFile($this->bucket, $object, $localdir); } $domain = explode('//', $this->domain); $url = 'http://'.$this->bucket.'.'.$domain[1].'/'.$object; //拼接访问路径 // $data = [ // 'status' => 0, // 'msg' => 'success', // 'url' => $url, // ]; return $url; } catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return; } }

     

转载于:https://www.cnblogs.com/bneglect/p/11612830.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值