Files
lgp-admin-plus-api/app/Enum/OssDriverEnum.php

113 lines
2.9 KiB
PHP
Raw Permalink Normal View History

2026-08-10 18:32:06 +08:00
<?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;
}
}