48 lines
2.0 KiB
PHP
48 lines
2.0 KiB
PHP
<?php
|
||
|
||
namespace App\Service\common\oss;
|
||
|
||
use App\BaseApp\BaseNotAuthService;
|
||
use App\Enum\OssDriverEnum;
|
||
use App\Service\common\upload\AliyunStorageService;
|
||
use App\Service\common\upload\LocalhostStorageService;
|
||
use App\Service\common\upload\QcloudStorageService;
|
||
use App\Service\common\upload\QiniuStorageService;
|
||
use App\Service\common\upload\S3CompatibleStorageService;
|
||
use App\Service\common\UtilsService;
|
||
|
||
/**
|
||
* OSS 存储工厂:按 OssDriverEnum 分发到对应实现(工厂 + 策略)
|
||
* 覆盖:local / aliyun / qcloud / qiniu / huawei / aws / minio / baidu
|
||
*/
|
||
class OssStorageFactory extends BaseNotAuthService
|
||
{
|
||
/**
|
||
* 根据明文运行时配置构建上传客户端
|
||
* 为什么集中在工厂:UploadService 不关心具体 SDK/签名差异,只拿接口用
|
||
*
|
||
* @param array $config getActiveConfig() 返回值(含 driver)
|
||
*/
|
||
public function make(array $config): OssStorageInterface
|
||
{
|
||
$driverCode = strtolower(trim((string) ($config['driver'] ?? OssDriverEnum::Local->value)));
|
||
$driver = OssDriverEnum::tryFrom($driverCode);
|
||
if ($driver === null) {
|
||
UtilsService::getInstance()->errorThrow(
|
||
'不支持的存储驱动:' . $driverCode . ',请改用本地存储或完善配置'
|
||
);
|
||
}
|
||
// 按驱动枚举创建策略实现;S3 兼容族共用一套 SigV4 客户端
|
||
return match ($driver) {
|
||
OssDriverEnum::Local => LocalhostStorageService::getInstance()->withConfig($config),
|
||
OssDriverEnum::Aliyun => AliyunStorageService::getInstance()->withConfig($config),
|
||
OssDriverEnum::Qcloud => QcloudStorageService::getInstance()->withConfig($config),
|
||
OssDriverEnum::Qiniu => QiniuStorageService::getInstance()->withConfig($config),
|
||
OssDriverEnum::Huawei,
|
||
OssDriverEnum::Aws,
|
||
OssDriverEnum::Minio,
|
||
OssDriverEnum::Baidu => S3CompatibleStorageService::getInstance()->withConfig($config),
|
||
};
|
||
}
|
||
}
|