PHP上传base64图片到OSS

前端通过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 */ //$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 );