uploadFile($bucket, $objectKey, $localPath); try { $ossClient->putObjectAcl($bucket, $objectKey, OssClient::OSS_ACL_TYPE_PUBLIC_READ); } catch (\Throwable $e) { Log::write('AliyunOss: putObjectAcl 失败(可改 Bucket 策略放行读): ' . $e->getMessage(), 'notice'); } return self::buildPublicUrl($cfg, $objectKey); } catch (OssException $e) { Log::write('AliyunOss 上传失败: ' . $e->getMessage(), 'error'); } catch (\Throwable $e) { Log::write('AliyunOss 上传异常: ' . $e->getMessage(), 'error'); } return ''; } /** * @param array $cfg */ protected static function buildPublicUrl(array $cfg, string $objectKey): string { $base = trim((string)($cfg['public_base'] ?? '')); if ($base !== '') { return rtrim($base, '/') . '/' . $objectKey; } $host = trim((string)($cfg['host'] ?? '')); if ($host === '') { $bucket = trim((string)($cfg['bucket'] ?? '')); $ep = trim((string)($cfg['endpoint'] ?? '')); if ($bucket !== '' && $ep !== '') { $host = $bucket . '.' . $ep; } } if ($host === '') { return ''; } $host = preg_replace('#^https?://#i', '', $host); return 'https://' . $host . '/' . $objectKey; } }