From f8b6d847d5d4bc75b031f20f95e84771e959afb8 Mon Sep 17 00:00:00 2001 From: wolfcode <37436228+wolf-leo@users.noreply.github.com> Date: Fri, 27 Dec 2024 11:25:02 +0800 Subject: [PATCH] =?UTF-8?q?fix(admin):=20=E9=98=BF=E9=87=8C=E4=BA=91?= =?UTF-8?q?=E5=AF=B9=E8=B1=A1=E5=AD=98=E5=82=A8=E7=AD=BE=E5=90=8D=E7=89=88?= =?UTF-8?q?=E6=9C=AC=20V4,=20upgrade=20OSS=20SDK=20and=20implement=20signa?= =?UTF-8?q?ture=20version=204?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Upgrade aliyuncs/oss-sdk-php to v2.7.2 or above - Implement signature version 4 for OSS client - Add region and environment variable credentials provider - Update error handling and code formatting --- app/admin/service/UploadService.php | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/app/admin/service/UploadService.php b/app/admin/service/UploadService.php index cbaf6ec..5a780e8 100644 --- a/app/admin/service/UploadService.php +++ b/app/admin/service/UploadService.php @@ -4,6 +4,7 @@ namespace app\admin\service; use app\admin\model\SystemUploadfile; use OSS\Core\OssException; +use OSS\Credentials\EnvironmentVariableCredentialsProvider; use OSS\OssClient; use think\facade\Env; use think\file\UploadedFile; @@ -112,10 +113,21 @@ class UploadService $accessKeySecret = $config['oss_access_key_secret']; $endpoint = $config['oss_endpoint']; $bucket = $config['oss_bucket']; + // 升级 aliyuncs/oss-sdk-php 到 v2.7.2 以上, 使用签名 v4 版本 + putenv('OSS_ACCESS_KEY_ID=' . $accessKeyId); + putenv('OSS_ACCESS_KEY_SECRET=' . $accessKeySecret); + $region = str_replace(['http://oss-', 'https://oss-', 'oss-'], '', explode('.aliyuncs.com', $endpoint)[0] ?? ''); + $provider = new EnvironmentVariableCredentialsProvider(); + $args = [ + "provider" => $provider, + "endpoint" => $endpoint, + "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4, + "region" => $region + ]; if ($file->isValid()) { $object = $this->setFilePath($file, Env::get('EASYADMIN.OSS_STATIC_PREFIX', 'easyadmin8') . '/'); try { - $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); + $ossClient = new OssClient($args); $_rs = $ossClient->putObject($bucket, $object, file_get_contents($file->getRealPath())); $oss_request_url = $_rs['oss-request-url'] ?? ''; if (empty($oss_request_url)) return ['code' => 0, 'data' => '上传至OSS失败']; @@ -164,7 +176,7 @@ class UploadService if (empty($location)) return ['code' => 0, 'data' => '上传至COS失败']; $location = 'https://' . $location; $this->setSaveData($file); - } catch (Exception $e) { + }catch (Exception $e) { return ['code' => 0, 'data' => $e->getMessage()]; } $data = ['url' => $location];