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