前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP之Yii框架处理图片base64编码字符串上传OSS

PHP之Yii框架处理图片base64编码字符串上传OSS

原创
作者头像
IT工作者
发布2022-04-04 16:31:27
1.1K0
发布2022-04-04 16:31:27
举报
文章被收录于专栏:程序技术知识

接收前端传过来的base64编码后的字符串, 如果是json字符串, 那么PHP使用file_get_contents('php://input'); 来接收. 本次这里是以post传参的形式传base64字符串.

代码语言:javascript
复制
$photo = \Yii::$app->request->post('photo', '');    //yii接收,photo变量存储的即base64字符串

设置base64转成图片后要保存的文件名 以及 路径

代码语言:javascript
复制
$filename = date('YmdHis').rand(1111,9999).'.png';
$path = \Yii::$app->basePath.'/web/temp';
if(!is_dir($path)){
    mkdir($path, 0777, 'true');
}
$imagePath = $path.'/'.$filename;  //文件的完整路径(本地的)

判断是否有逗号, 如果有就截取后半部分

代码语言:javascript
复制
if(strstr($photo, ',')){
    $photo = explode(',', $photo);
    $photo = $photo[1];
}

base64生成图片

代码语言:javascript
复制
$r = file_put_contents($imagePath, base64_decode($photo));   
//$r接收的是返回的字节数, 至此本地成功生成图片

接下来是将本地图片保存至oss上, 并删除本地图片

代码语言:javascript
复制
$photo_url = $this->uploadImg($imagePath);  //调用上传oss方法
//删掉本地图片
unlink($imagePath);

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

代码语言:javascript
复制
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='')
    {
        //将ossSDK包放在extensions目录下, 然后引入autoload.php, 还有命名空间. 即可使用.
        include \Yii::$app->basePath.'extensions/aliyun-oss-php-sdk-2.2.4/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;
        }
    }

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档