美文网首页
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