Yii2框架中将base64图片上传到阿里云oss上解决方案
首先配置yii框架中的阿里云oss插件
打开composer.json,在require中添加如下代码:
"require": {
"aliyuncs/oss-sdk-php": "^2.3"
},
保存退出,执行:
composer require aliyuncs/oss-sdk-php
这个过程会很漫长,请等待
安装完毕后,会看到vendor/aliyuncs如下图:
写一个ossservice服务
<?php
namespace app\services;
use OSS\Core\OssException;
use OSS\OssClient;
use Yii;
class OssService
{
private $oss;
/**
* @throws OssException
*/
public function saveToOss($base64, $postfix,$file_path)
{
$this->oss = 'https://www.qipa250.com';
$accessKeyId = $this->oss['accessKeyId']; //获取阿里云oss的accessKeyId
$accessKeySecret = $this->oss['accessKeySecret']; //获取阿里云oss的accessKeySecret
$endpoint = $this->oss['endPoint']; //获取阿里云oss的endPoint
$object = new OssClient($accessKeyId, $accessKeySecret, $endpoint); //实例化OssClient对象
$img_upload_name = date("YmdHis") . rand(100000, 999999) . rand(100000, 999999) . '.' . $postfix;
$this->putObject($object, $file_path.'/' . $img_upload_name, base64_decode($base64));
return $file_path.'/' . $img_upload_name;
}
/**
* 删除一个内容
* @param $object
* @param $url
* @throws OssException
*/
public function deleteFromOss($url)
{
$this->oss = 'https://www.qipa250.com';
$accessKeyId = $this->oss['accessKeyId']; //获取阿里云oss的accessKeyId
$accessKeySecret = $this->oss['accessKeySecret']; //获取阿里云oss的accessKeySecret
$endpoint = $this->oss['endPoint']; //获取阿里云oss的endPoint
$object = new OssClient($accessKeyId, $accessKeySecret, $endpoint); //实例化OssClient对象
$this->deleteObject($object, $url);
return true;
}
/**
* 上传单个文件
* @param $ossClient
* @param $object
* @param $content
*/
private function putObject($ossClient, $object, $content)
{
try {
$ossClient->putObject($this->oss['bucket'], $object, $content);
} catch (OssException $e) {
}
}
/**
* 删除单个文件
* @param $ossClient
* @param $object
*/
private function deleteObject($ossClient, $object)
{
try {
$ossClient->deleteObject($this->oss['bucket'], $object);
} catch (OssException $e) {
}
}
}
调用ossservice服务
定义一个base64的图片地址
$file = "data:image/jpg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE........
将base64位的图片上传到oss上
$pic_oss_file = 'qipa250_file';//此为在oss中的bucket 名称
$postfix = 'jpg';
//strstr 查找对应base64位中包含.若包含则使用explode过滤后将第一个值赋值给file
if (strstr($file, ",")) {
$file = explode(',', $file);
$file = $file[1];
}
$OssService = new OssService();
$fileName = $OssService->saveToOss($file, $postfix, $pic_oss_file);