133 lines
3.2 KiB
PHP
133 lines
3.2 KiB
PHP
<?php
|
|
|
|
namespace App\Service\common\upload;
|
|
|
|
use App\BaseApp\BaseService;
|
|
use Exception;
|
|
use Qiniu\Auth;
|
|
use Qiniu\Storage\BucketManager;
|
|
use Qiniu\Storage\UploadManager;
|
|
|
|
class QiniuStorageService extends BaseService
|
|
{
|
|
/**
|
|
* @var mixed 单例实例,确保该类只有一个全局实例
|
|
*/
|
|
protected static mixed $_instance;
|
|
private $accessKey;
|
|
private $secretKey;
|
|
private $bucket;
|
|
private $domain;
|
|
|
|
public function __construct()
|
|
{
|
|
parent::__construct();
|
|
$this->accessKey = config('cc.oss.qiniu.access_key');
|
|
$this->secretKey = config('cc.oss.qiniu.secret_key');
|
|
$this->bucket = config('cc.oss.qiniu.bucket');
|
|
$this->domain = config('cc.oss.qiniu.domain');
|
|
}
|
|
|
|
|
|
/**
|
|
* 获取实例
|
|
* @return null|static
|
|
*/
|
|
public static function getInstance(): null|static
|
|
{
|
|
$name = get_called_class();
|
|
if (!isset(self::$_instance[$name])) {
|
|
self::$_instance[$name] = new static();
|
|
}
|
|
|
|
return self::$_instance[$name];
|
|
}
|
|
|
|
/**
|
|
* 上传图片
|
|
*
|
|
* @param string $filePath 文件本地路径
|
|
* @param string $key 上传到七牛云的文件名
|
|
* @return array|bool
|
|
* @throws Exception
|
|
*/
|
|
public function uploadImage($filePath, $key): bool|array
|
|
{
|
|
return $this->uploadFile($filePath, $key);
|
|
}
|
|
|
|
/**
|
|
* 上传视频
|
|
*
|
|
* @param string $filePath 文件本地路径
|
|
* @param string $key 上传到七牛云的文件名
|
|
* @return array|bool
|
|
*/
|
|
public function uploadVideo($filePath, $key): bool|array
|
|
{
|
|
return $this->uploadFile($filePath, $key);
|
|
}
|
|
|
|
/**
|
|
* 删除图片
|
|
*
|
|
* @param string $key 七牛云存储的文件名
|
|
* @return bool
|
|
*/
|
|
public function deleteImage($key): bool
|
|
{
|
|
return $this->deleteFile($key);
|
|
}
|
|
|
|
/**
|
|
* 删除视频
|
|
*
|
|
* @param string $key 七牛云存储的文件名
|
|
* @return bool
|
|
*/
|
|
public function deleteVideo($key): bool
|
|
{
|
|
return $this->deleteFile($key);
|
|
}
|
|
|
|
/**
|
|
* 上传文件
|
|
*
|
|
* @param string $filePath 文件本地路径
|
|
* @param string $key 上传到七牛云的文件名
|
|
* @return array|bool
|
|
* @throws Exception
|
|
*/
|
|
private function uploadFile(string $filePath, string $key): bool|array
|
|
{
|
|
$auth = new Auth($this->accessKey, $this->secretKey);
|
|
$token = $auth->uploadToken($this->bucket);
|
|
$uploadMgr = new UploadManager();
|
|
|
|
list($ret, $err) = $uploadMgr->putFile($token, $key, $filePath);
|
|
if ($err !== null) {
|
|
return false;
|
|
} else {
|
|
return [
|
|
'key' => $ret['key'],
|
|
'url' => $this->domain . '/' . $ret['key']
|
|
];
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 删除文件
|
|
*
|
|
* @param string $key 七牛云存储的文件名
|
|
* @return bool
|
|
*/
|
|
private function deleteFile(string $key): bool
|
|
{
|
|
$auth = new Auth($this->accessKey, $this->secretKey);
|
|
$bucketMgr = new BucketManager($auth);
|
|
|
|
$err = $bucketMgr->delete($this->bucket, $key);
|
|
return $err === null;
|
|
}
|
|
}
|