113 lines
2.9 KiB
PHP
113 lines
2.9 KiB
PHP
|
|
<?php
|
|||
|
|
|
|||
|
|
namespace App\Enum;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* OSS 存储驱动枚举:管理端卡片展示与上传分发共用
|
|||
|
|
*/
|
|||
|
|
enum OssDriverEnum: string
|
|||
|
|
{
|
|||
|
|
case Local = 'local';
|
|||
|
|
case Aliyun = 'aliyun';
|
|||
|
|
case Qcloud = 'qcloud';
|
|||
|
|
case Qiniu = 'qiniu';
|
|||
|
|
case Huawei = 'huawei';
|
|||
|
|
case Aws = 'aws';
|
|||
|
|
case Minio = 'minio';
|
|||
|
|
case Baidu = 'baidu';
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 驱动编码(与库表 driver 一致)
|
|||
|
|
*/
|
|||
|
|
public function code(): string
|
|||
|
|
{
|
|||
|
|
return $this->value;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 中文展示名
|
|||
|
|
*/
|
|||
|
|
public function label(): string
|
|||
|
|
{
|
|||
|
|
return match ($this) {
|
|||
|
|
self::Local => '本地存储',
|
|||
|
|
self::Aliyun => '阿里云 OSS',
|
|||
|
|
self::Qcloud => '腾讯云 COS',
|
|||
|
|
self::Qiniu => '七牛云',
|
|||
|
|
self::Huawei => '华为云 OBS',
|
|||
|
|
self::Aws => 'AWS S3',
|
|||
|
|
self::Minio => 'MinIO',
|
|||
|
|
self::Baidu => '百度云 BOS',
|
|||
|
|
};
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 卡片说明文案
|
|||
|
|
*/
|
|||
|
|
public function description(): string
|
|||
|
|
{
|
|||
|
|
return match ($this) {
|
|||
|
|
self::Local => '文件保存到应用服务器本地磁盘',
|
|||
|
|
self::Aliyun => '阿里云对象存储 OSS',
|
|||
|
|
self::Qcloud => '腾讯云对象存储 COS',
|
|||
|
|
self::Qiniu => '七牛云对象存储 Kodo',
|
|||
|
|
self::Huawei => '华为云对象存储 OBS',
|
|||
|
|
self::Aws => '亚马逊 S3 对象存储',
|
|||
|
|
self::Minio => 'S3 兼容的私有化对象存储',
|
|||
|
|
self::Baidu => '百度智能云对象存储 BOS',
|
|||
|
|
};
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 前端卡片图标(iconify)
|
|||
|
|
*/
|
|||
|
|
public function icon(): string
|
|||
|
|
{
|
|||
|
|
return match ($this) {
|
|||
|
|
self::Local => 'lucide:hard-drive',
|
|||
|
|
self::Aliyun => 'simple-icons:alibabadotcom',
|
|||
|
|
self::Qcloud => 'simple-icons:tencentqq',
|
|||
|
|
self::Qiniu => 'lucide:cloud',
|
|||
|
|
self::Huawei => 'simple-icons:huawei',
|
|||
|
|
self::Aws => 'simple-icons:amazonaws',
|
|||
|
|
self::Minio => 'simple-icons:minio',
|
|||
|
|
self::Baidu => 'simple-icons:baidu',
|
|||
|
|
};
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 是否需要 AccessKey / SecretKey
|
|||
|
|
*/
|
|||
|
|
public function needsSecret(): bool
|
|||
|
|
{
|
|||
|
|
return $this !== self::Local;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 前端驱动选项列表(含图标,供卡片展示)
|
|||
|
|
*/
|
|||
|
|
public static function options(): array
|
|||
|
|
{
|
|||
|
|
$list = [];
|
|||
|
|
foreach (self::cases() as $case) {
|
|||
|
|
$list[] = [
|
|||
|
|
'code' => $case->code(),
|
|||
|
|
'name' => $case->label(),
|
|||
|
|
'label' => $case->label(),
|
|||
|
|
'description' => $case->description(),
|
|||
|
|
'icon' => $case->icon(),
|
|||
|
|
'needs_secret' => $case->needsSecret() ? 1 : 0,
|
|||
|
|
];
|
|||
|
|
}
|
|||
|
|
return $list;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 校验驱动编码是否合法
|
|||
|
|
*/
|
|||
|
|
public static function isValid(string $code): bool
|
|||
|
|
{
|
|||
|
|
return self::tryFrom($code) !== null;
|
|||
|
|
}
|
|||
|
|
}
|