75 lines
2.3 KiB
PHP
75 lines
2.3 KiB
PHP
<?php
|
|
|
|
namespace App\Service\common;
|
|
|
|
use App\BaseApp\BaseService;
|
|
use App\Service\common\oss\OssRuntimeConfigService;
|
|
use App\Service\common\oss\OssStorageFactory;
|
|
use App\Service\common\oss\OssStorageInterface;
|
|
use App\Service\FileService;
|
|
use Illuminate\Support\Str;
|
|
|
|
/**
|
|
* 统一上传入口:按数据库启用的 OSS 配置,经工厂分发到对应存储实现
|
|
*/
|
|
class UploadService extends BaseService
|
|
{
|
|
private OssStorageInterface $uploadService;
|
|
|
|
public function __construct()
|
|
{
|
|
parent::__construct();
|
|
try {
|
|
$config = OssRuntimeConfigService::getInstance()->getActiveConfig();
|
|
$this->uploadService = OssStorageFactory::getInstance()->make($config);
|
|
} catch (\Throwable $e) {
|
|
// 配置异常时回退本地,避免整站上传不可用
|
|
$this->uploadService = OssStorageFactory::getInstance()->make([
|
|
'driver' => 'local',
|
|
'path_prefix' => 'uploads',
|
|
'domain' => '',
|
|
]);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 上传图片到当前启用的存储
|
|
*
|
|
* @param mixed $file 上传文件对象
|
|
*/
|
|
public function uploadImage($file): array|bool
|
|
{
|
|
$ext = $file->getClientOriginalExtension();
|
|
$key = 'spa/image/' . date('Ymd') . '/' . 'cc_upload_' . Str::random() . uniqid() . '.' . $ext;
|
|
$result = $this->uploadService->uploadVideo($file, $key);
|
|
if (!$result) {
|
|
$this->utils->errorThrow('图片上传失败');
|
|
}
|
|
FileService::getInstance()->create([
|
|
'user_id' => $this->userId,
|
|
'url' => $result['url'],
|
|
]);
|
|
return $result;
|
|
}
|
|
|
|
/**
|
|
* 上传视频到当前启用的存储
|
|
*
|
|
* @param mixed $file 上传文件对象
|
|
*/
|
|
public function uploadVideo($file): array|bool
|
|
{
|
|
$ext = $file->getClientOriginalExtension();
|
|
$key = 'spa/video/' . date('Ymd') . '/' . 'cc_upload_' . Str::random() . uniqid() . '.' . $ext;
|
|
$result = $this->uploadService->uploadVideo($file, $key);
|
|
if (!$result) {
|
|
$this->utils->errorThrow('视频上传失败');
|
|
}
|
|
FileService::getInstance()->create([
|
|
'user_id' => $this->userId,
|
|
'url' => $result['url'],
|
|
]);
|
|
return $result;
|
|
}
|
|
}
|