diff --git a/app/Http/Requests/Admin/StrategyRequest.php b/app/Http/Requests/Admin/StrategyRequest.php index 7a054729..5e2d8927 100644 --- a/app/Http/Requests/Admin/StrategyRequest.php +++ b/app/Http/Requests/Admin/StrategyRequest.php @@ -21,11 +21,13 @@ class StrategyRequest extends FormRequest 'intro' => 'max:2000', 'key' => 'required|integer', 'configs.root' => ['max:1000', function ($attribute, $value, $fail) { - if (! is_dir($value)) { - return $fail('储存路径不存在'); - } - if (! is_writeable($value)) { - return $fail('储存路径没有写入权限'); + if ($value) { + if (! is_dir($value)) { + return $fail('储存路径不存在'); + } + if (! is_writeable($value)) { + return $fail('储存路径没有写入权限'); + } } }], 'configs.url' => ['required', 'url', function ($attribute, $value, $fail) { diff --git a/app/Models/Strategy.php b/app/Models/Strategy.php index bf52214f..b35c0748 100644 --- a/app/Models/Strategy.php +++ b/app/Models/Strategy.php @@ -57,10 +57,18 @@ class Strategy extends Model protected static function booted() { static::saving(function (self $strategy) { - $strategy->configs['root'] = $strategy->configs->get('root', ''); - $strategy->configs['url'] = rtrim($strategy->configs->get('url', env('APP_URL')), '/'); - $symlink = Strategy::getRootPath($strategy->configs['url']); - (new Filesystem())->link($strategy->configs['root'], $symlink); + $strategy->configs['root'] = $strategy->configs->get('root'); + $strategy->configs['url'] = rtrim($strategy->configs->get('url'), '/'); + if ($strategy->key == StrategyKey::Local) { + $symlink = self::getRootPath($strategy->configs['url']); + $target = $strategy->configs['root'] ?: config('filesystems.disks.uploads.root'); + (new Filesystem())->link($target, $symlink); + // 是否需要移除旧的符号链接 + $oldSymlink = self::getRootPath($strategy->getOriginal('configs')['url']); + if ($oldSymlink != $symlink) { + @unlink($oldSymlink); + } + } }); } diff --git a/resources/views/admin/strategy/add.blade.php b/resources/views/admin/strategy/add.blade.php index b6d792fb..74d3ee99 100644 --- a/resources/views/admin/strategy/add.blade.php +++ b/resources/views/admin/strategy/add.blade.php @@ -39,8 +39,8 @@
- - + + 储存路径为绝对路径,设置错误或没有读写权限可能会导致图片保存失败。如果储存路径与其他策略相同,那么请注意使用角色组的路径命名规则、文件命名规则来区分不同文件夹,否则可能会因为名称重复而导致图片物理文件被覆盖。
@@ -50,7 +50,7 @@ - 本地储存的访问网址必须有根路径,例如:https://www.lsky.pro/uploads 中的 uploads 就是根路径,且根路径不能和其他策略重复。 + 本地储存的访问网址必须有根路径,例如:https://www.lsky.pro/uploads 中的 uploads 就是根路径,且根路径不能和其他策略重复。修改根路径直接影响已经上传并已使用的链接的访问。 diff --git a/resources/views/admin/strategy/edit.blade.php b/resources/views/admin/strategy/edit.blade.php index fdbca84e..9461f039 100644 --- a/resources/views/admin/strategy/edit.blade.php +++ b/resources/views/admin/strategy/edit.blade.php @@ -39,8 +39,8 @@
- - + + 储存路径为绝对路径,设置错误或没有读写权限可能会导致图片保存失败。如果储存路径与其他策略相同,那么请注意使用角色组的路径命名规则、文件命名规则来区分不同文件夹,否则可能会因为名称重复而导致图片物理文件被覆盖。
@@ -50,7 +50,7 @@ - 本地储存的访问网址必须有根路径,例如:https://www.lsky.pro/uploads 中的 uploads 就是根路径,且根路径不能和其他策略重复。 + 本地储存的访问网址必须有根路径,例如:https://www.lsky.pro/uploads 中的 uploads 就是根路径,且根路径不能和其他策略重复。修改根路径直接影响已经上传并已使用的链接的访问。