美文网首页
PHP上传base64图片到OSS

PHP上传base64图片到OSS

作者: 江河湖海琴瑟琵琶 | 来源:发表于2021-02-26 15:26 被阅读0次

    前端通过form表单enctype="multipart/form-data"直接上传文件,PHP可以在$_FILES中接收.直接传到阿里OSS服务器
    现在前端把图片转成base64(字符串)上传,没法用$_FILES接收

    解决方案

    步骤1. 输出到本地
    步骤2. 上传到OSS服务器,得到url
    步骤3. 删除本地文件

    /**
         * 上传base64图片到OSS服务器
         * @param string $imageBase64 从前端接收到的图片资源
         * @param string $serviceDir 想要保存在OSS服务器上的目录
         *
         * @return string 图片在OSS服务器上的地址
         */
        public function uploadImageBase64($imageBase64,$serviceDir){
            $URL = '';
            /** 得到文件后缀 */
            //data:image/png;base64,iVBORw0KGgoA..
            list($head,$image_data) = explode(',',$imageBase64); // head = data:image/png;base64 image_data = iVBORw0KGgoA..
            list($type,) = explode(';',$head);// type = data:image/png
            list(,$suffix) = explode('/',$type);// suffix = png
    
            /** 步骤1. 输出到本地 */
            $localDir = $_SERVER['DOCUMENT_ROOT'].'/Temp';
            $localFilename = $this->makeUUID().'.'.$suffix;
            file_put_contents($localDir.'/'.$localFilename,base64_decode($image_data));
    
            /** 步骤2. 上传到OSS服务器,得到url */
            try{
                //$this->oss_client->uploadFile 是阿里提供的PHP-SDK中的方法
                $response = $this->oss_client->uploadFile($this->bucket,$serviceDir.'/'.$localFilename,$localDir.'/'.$localFilename);
                $URL = $response['info']['url'];
            }catch (\Exception $e){
                Log::write('文件上传错误:'.$e->getMessage());
                $URL = '';
            } finally {
                /** 步骤3. 删除本地文件 */
                unlink($localDir.'/'.$localFilename);
                return $URL;
            }
        }
    

    生成uuid方法

    /**
         * 生成uuid (8-4-4-4-12)
         * @return string
         */
        private function makeUUID(){
            $chars = md5(uniqid(mt_rand(), true));
            return substr ( $chars, 0, 8 ) . '-'
                . substr ( $chars, 8, 4 ) . '-'
                . substr ( $chars, 12, 4 ) . '-'
                . substr ( $chars, 16, 4 ) . '-'
                . substr ( $chars, 20, 12 );
        }
    

    调用时只需要

    $serviceDir = 'Uploads/driver_report';//OSS服务器上保存的位置
    $obj = new myClass();
    $url = $obj->uploadImageBase64($post['img1'],$serviceDir)
    

    相关文章

      网友评论

          本文标题:PHP上传base64图片到OSS

          本文链接:https://www.haomeiwen.com/subject/uwwmfltx.html