首页 > 技术文章 > base64格式的图片上传阿里云

e-spongebob 2018-11-01 16:31 原文

base64格式的图片上传阿里云

上传图片的时候,除了普通的图片上传,还有一张图片信息是以base64格式发送到后台的。

后台接受base64格式的图片,上传至阿里云代码:(主要是将base64转化成临时的图片文件,上传后删除即可)

   /**
     * @param $imgBase64 获取图片base64字符串
     * return String '返回阿里云上的图片路径
     */
    public function uploadUserImg($imgBase64,$workno,$realName)
    {
        // 图片上传测试
        $bucketName = getLinkageNameByCode('OSS_CONFIG','BUCKET_NAME'); // 存储空间名称
        $accessId = getLinkageNameByCode('OSS_CONFIG','ACCESS_ID');
        $accessKey = getLinkageNameByCode('OSS_CONFIG','ACCESS_KEY');
        $endpoInt = getLinkageNameByCode('OSS_CONFIG','ENDPOINT'); // OSS数据中心访问域名
        if (preg_match('/^(data:\s*image\/(\w+);base64,)/',$imgBase64,$res)) {
            //获取图片类型
            $type = $res[2];
            //图片名字
            $fileName = time().'.'.$type;
            // 临时文件
            $tmpfname = tempnam("/tmp/", "FOO");
            $handle = fopen($tmpfname, "w");
            if (fwrite($handle,base64_decode(str_replace($res[1],'', $imgBase64)))){
                $res = OssUtil::FileUpload($accessId,$accessKey,$endpoInt,$bucketName,'avator/'.$workno.'/'.$realName.'/'.$fileName,$tmpfname);
                fclose($handle);
                unlink($tmpfname);
                return $res['info']['url'];
            }
        }
    }
 /**
     * 用于上传文件
     * @param $ACCESS_ID string OSS获得的AccessKeyId
     * @param $ACCESS_KEY string OSS获得的AccessKeySecret
     * @param $ENDPOINT string OSS数据中心的访问域名
     * @param $bucket_name string 存储空间名称
     * @param $object string 文件名称
     * @param $filePath string 由本地文件路径加文件名包括后缀组成,例如/users/local/myfile.txt
     * @return null|void
     */
    function FileUpload($ACCESS_ID,$ACCESS_KEY,$ENDPOINT,$bucket_name,$object,$filePath){
        try{
            $ossClient = new OssClient($ACCESS_ID, $ACCESS_KEY, $ENDPOINT);
            $getReturn = $ossClient->uploadFile($bucket_name, $object, $filePath);
        } catch(OssException $e) {
            \Think\Log::record(__FUNCTION__ . ": upload FAILED\n", 'INFO');
            \Think\Log::record("upload FAILED : ".$e->getMessage() . "\n", 'INFO');
            return $e->getMessage();
        }
        return $getReturn;
    }

 

推荐阅读