From 7131a6c8789351771645843253d14809802265fd Mon Sep 17 00:00:00 2001 From: JaguarJack Date: Tue, 21 Apr 2020 17:07:19 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=88=E5=B9=B6=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- extend/catcher/CatchUpload.php | 50 ++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/extend/catcher/CatchUpload.php b/extend/catcher/CatchUpload.php index 72b9caf..dab98b1 100644 --- a/extend/catcher/CatchUpload.php +++ b/extend/catcher/CatchUpload.php @@ -2,6 +2,7 @@ namespace catcher; use catchAdmin\system\model\Attachments; +use catchAdmin\system\model\Config; use catcher\exceptions\FailedException; use catcher\exceptions\ValidateFailedException; use think\exception\ValidateException; @@ -55,6 +56,8 @@ class CatchUpload */ public function upload(UploadedFile $file): string { + $this->initUploadConfig(); + $path = Filesystem::disk($this->getDriver())->putFile($this->getPath(), $file); if ($path) { @@ -211,4 +214,51 @@ class CatchUpload return $this; } + + + protected function initUploadConfig() + { + $configModel = app(Config::class); + + $upload = $configModel->where('key', 'upload')->find(); + + if ($upload) { + $disk = app()->config->get('filesystem.disks'); + $uploadConfigs = $configModel->getConfig($upload->id); + // 读取上传可配置数据 + foreach ($uploadConfigs as $key => &$config) { + // $disk[$key]['type'] = $key; + // 腾讯云配置处理 + if (strtolower($key) == 'qcloud') { + $config['credentials'] = [ + 'appId' => $config['app_id'] ?? '', + 'secretKey' => $config['secret_key'] ?? '', + 'secretId' => $config['secret_id'] ?? '', + ]; + $readFromCdn = $config['read_from_cdn'] ?? false; + $config['read_from_cdn'] = $readFromCdn ? true : false; + } + // OSS 配置 + if (strtolower($key) == 'oss') { + $isCname = $config['is_cname'] ?? false; + $config['is_cname'] = $isCname ? true : false; + } + } + + // 合并数组 + array_walk($disk, function (&$item, $key) use ($uploadConfigs){ + if (!in_array($key, ['public', 'local'])) { + if ($uploadConfigs[$key] ?? false) { + foreach ($uploadConfigs[$key] as $k => $value) { + $item[$k] = $value; + } + } + } + }); + // 重新分配配置 + app()->config->set([ + 'disk' => $disk, + ], 'filesystem'); + } + } }