refactor:优化附件管理中对上传驱动的使用

This commit is contained in:
妙码生花 2024-08-04 05:44:42 +08:00
parent f6ef7c1bd6
commit e9e0792b2a
2 changed files with 19 additions and 14 deletions

View File

@ -106,35 +106,38 @@ class Upload
/** /**
* 获取上传驱动句柄 * 获取上传驱动句柄
* @param ?string $driver 驱动名称
* @param bool $noDriveException 找不到驱动是否抛出异常
* @return bool|Driver
*/ */
public function getDriver(?string $driver = null): Driver public function getDriver(?string $driver = null, bool $noDriveException = true): bool|Driver
{ {
if (is_null($driver)) { if (is_null($driver)) {
$driver = $this->driver['name']; $driver = $this->driver['name'];
} }
if (!isset($this->driver['handler'][$driver])) { if (!isset($this->driver['handler'][$driver])) {
$class = $this->resolveDriverClass($driver); $class = $this->resolveDriverClass($driver);
if ($class) {
$this->driver['handler'][$driver] = new $class(); $this->driver['handler'][$driver] = new $class();
} elseif ($noDriveException) {
throw new InvalidArgumentException("Driver [$driver] not supported.");
} }
return $this->driver['handler'][$driver]; }
return $this->driver['handler'][$driver] ?? false;
} }
/** /**
* 获取驱动类 * 获取驱动类
* @param string $driver
* @return string
*/ */
protected function resolveDriverClass(string $driver): string protected function resolveDriverClass(string $driver): bool|string
{ {
if ($this->driver['namespace'] || str_contains($driver, '\\')) { if ($this->driver['namespace'] || str_contains($driver, '\\')) {
$class = str_contains($driver, '\\') ? $driver : $this->driver['namespace'] . Str::studly($driver); $class = str_contains($driver, '\\') ? $driver : $this->driver['namespace'] . Str::studly($driver);
if (class_exists($class)) { if (class_exists($class)) {
return $class; return $class;
} }
} }
return false;
throw new InvalidArgumentException("Driver [$driver] not supported.");
} }
/** /**

View File

@ -43,7 +43,8 @@ class Attachment extends Model
public function getFullUrlAttr($value, $row): string public function getFullUrlAttr($value, $row): string
{ {
return self::$upload->getDriver($row['storage'])->url($row['url']); $driver = self::$upload->getDriver($row['storage'], false);
return $driver ? $driver->url($row['url']) : full_url($row['url']);
} }
/** /**
@ -58,7 +59,8 @@ class Attachment extends Model
['storage', '=', $model->storage], ['storage', '=', $model->storage],
])->find(); ])->find();
if ($repeat) { if ($repeat) {
if (!self::$upload->getDriver($repeat->storage)->exists($repeat->url)) { $driver = self::$upload->getDriver($repeat->storage, false);
if ($driver && !$driver->exists($repeat->url)) {
$repeat->delete(); $repeat->delete();
return true; return true;
} else { } else {
@ -92,8 +94,8 @@ class Attachment extends Model
{ {
Event::trigger('AttachmentDel', $model); Event::trigger('AttachmentDel', $model);
$driver = self::$upload->getDriver($model->storage); $driver = self::$upload->getDriver($model->storage, false);
if ($driver->exists($model->url)) { if ($driver && $driver->exists($model->url)) {
$driver->delete($model->url); $driver->delete($model->url);
} }
} }