Files
nl-admin-api/app/Service/common/oss/OssStorageFactory.php
2026-08-10 18:32:06 +08:00

48 lines
2.0 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?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),
};
}
}