From 859886636f3d6d1b71296eeee2d29909393fee93 Mon Sep 17 00:00:00 2001 From: wikiboss Date: Sat, 17 Oct 2026 16:13:26 +0800 Subject: [PATCH] =?UTF-8?q?feat(image):=20=E5=85=A8=E5=B1=80=E6=94=AF?= =?UTF-8?q?=E6=8C=81COS=E5=9B=BE=E7=89=87=E5=8E=8B=E7=BC=A9=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E9=99=90=E5=88=B6=E6=9C=80=E5=A4=A7=E5=AE=BD=E5=BA=A6?= =?UTF-8?q?1000px=E5=B9=B6=E8=BD=AC=E6=8D=A2=E4=B8=BAwebp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/admin/controller/general/File.php | 5 +---- application/common.php | 20 ++++++++++++++++++- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/application/admin/controller/general/File.php b/application/admin/controller/general/File.php index 70f7c3e..62fe4c6 100644 --- a/application/admin/controller/general/File.php +++ b/application/admin/controller/general/File.php @@ -45,14 +45,11 @@ class File extends Backend 'order' => $order ], $rows, $page); - $cosConfig = function_exists('get_addon_config') ? get_addon_config('cos') : []; - $cdnUrl = (!empty($cosConfig['cdnurl'])) ? rtrim($cosConfig['cdnurl'], '/') : ''; - if (!empty($result['list'])) { foreach ($result['list'] as &$v) { $v['checked'] = false; $v['showTools'] = false; - $v['fullurl'] = (!empty($cdnUrl) && stripos($v['url'], 'http') !== 0) ? ($cdnUrl . $v['url']) : cdnurl($v['url'], true); + $v['fullurl'] = cdnurl($v['url'], true); } } diff --git a/application/common.php b/application/common.php index 0dea3e5..0f32db2 100644 --- a/application/common.php +++ b/application/common.php @@ -519,7 +519,16 @@ if (!function_exists('cdnurl')) { { $regex = "/^((?:[a-z]+:)?\/\/|data:image\/)(.*)/i"; $cdnurl = \think\Config::get('upload.cdnurl'); - $url = is_array($url) ? $url[0] : $url; + if (empty($cdnurl) && function_exists('get_addon_config')) { + $cosConfig = get_addon_config('cos'); + if (!empty($cosConfig['cdnurl'])) { + $cdnurl = rtrim($cosConfig['cdnurl'], '/'); + } + } + $url = is_array($url) ? $url[0] : $url; + if (empty($url)) { + return ''; + } if (is_bool($domain) || stripos($cdnurl, '/') === 0) { $url = preg_match($regex, $url) || ($cdnurl && stripos($url, $cdnurl) === 0) ? $url : $cdnurl . $url; } @@ -527,6 +536,15 @@ if (!function_exists('cdnurl')) { $domain = is_bool($domain) ? request()->domain() : $domain; $url = $domain . $url; } + + // 采用COS图片处理参数将图片最大宽度限制在1000px以内并转为webp格式 + if (!empty($cdnurl) && stripos($url, $cdnurl) !== false) { + if (preg_match('/\.(jpg|jpeg|png|bmp|webp)(\?.*)?$/i', $url) && stripos($url, 'imageMogr2') === false) { + $separator = (strpos($url, '?') !== false) ? '&' : '?'; + $url .= $separator . 'imageMogr2/thumbnail/1000x%3E/format/webp'; + } + } + return $url; } }