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; }
