php base64字符串转二进制流

最近在做图片base64数据流上传到阿里云OSS,发现不能直接上传,需要把base64转换为二进制流才可以。
base64格式:

data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcHBw8LCwkMEQ8S
EhEPERETFhwXExQaFRERGCEYGh0dHx8fExciJCIeJBweHx7/2wBDAQUFBQcGBw4ICA4eFBEUHh4eHh4eHh4eHh......

把base64Binary里面的String拿出来,这个String就是Base64String,再使用base64_decode(base64String)直接就得到了byte[]了。

function base64_to_blob($base64Str){
    if($index = strpos($base64Str,'base64,',0)){
        $blobStr = substr($base64Str,$index+7);
        $typestr = substr($base64Str,0,$index);
        preg_match("/^data:(.*);$/",$typestr,$arr);
        return ['blob'=>base64_decode($blobStr),'type'=>$arr[1]];
    }
    return false;
}

$data = base64_to_blob($base64Str);
header('Location: '.$data['type']);
echo $data['blob'];




$datablob  = base64_to_blob($base64);
//上传到阿里云
try{
    $ossclient  = new \OSS\OssClient(OSS_ACCESS_KEY,OSS_ACCESS_KEY_SECRET,OSS_END_POINT,true);
    $dir = 'works/'.date('Y/m/d').'/'.uniqid().'.jpg';
    $results = $ossclient->putObject(OSS_BUCKET,$dir,$datablob['blob']);
    $imageurl = $results['info']['url'] ;
    return $imageurl;
}catch(\OSS\Core\OssException $e){
    //return ['code'=>$e->getErrorCode(),'msg'=>$e->getMessage()];
    //print_r($e->getMessage());
    return false;
}

相关链接:https://www.cnblogs.com/dudeyouth/p/6611635.html

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注