accessKeyId = getenv('OSS_ACCESS_KEY_ID'); $this->accessKeySecret = getenv('OSS_ACCESS_KEY_SECRET'); $this->bucket = getenv('OSS_BUCKET', 'vehicle-info'); $this->endpoint = getenv('OSS_ENDPOINT', 'https://oss-ap-southeast-1.aliyuncs.com'); // 记录配置信息 error_log("OSS Configuration:"); error_log("AccessKeyId: " . substr($this->accessKeyId, 0, 4) . "****"); error_log("Bucket: " . $this->bucket); error_log("Endpoint: " . $this->endpoint); $this->ossClient = new OssClient($this->accessKeyId, $this->accessKeySecret, $this->endpoint); // 测试连接 $this->ossClient->doesBucketExist($this->bucket); } catch (OssException $e) { error_log("OSS Client Initialization Error: " . $e->getMessage()); throw new \RuntimeException('OSS Client Initialization Error: ' . $e->getMessage()); } } /** * 上传图片到 OSS * @param string $filePath 本地文件路径 * @param string $objectKey OSS上存储的对象名称 * @return string 图片的 URL */ public function uploadImage($filePath, $objectKey) { try { // 上传文件到 OSS $this->ossClient->uploadFile($this->bucket, $objectKey, $filePath); // 构造图片的私有 URL $url = $this->generatePrivateUrl($objectKey); return $url; } catch (OssException $e) { // 错误处理 throw new \RuntimeException('OSS Error: ' . $e->getMessage()); } } /** * 生成图片的私有访问 URL * @param string $objectKey * @return string */ public function generatePrivateUrl($objectKey, $expireTime = 3600) { try { // 生成 OSS 私有 URL $url = $this->ossClient->signUrl($this->bucket, $objectKey, $expireTime); // 解析 URL 以获取查询参数 $parsedUrl = parse_url($url); parse_str($parsedUrl['query'], $queryParams); // 重新构建 URL,使用 rawurlencode 确保正确的编码 $baseUrl = $parsedUrl['scheme'] . '://' . $parsedUrl['host'] . $parsedUrl['path']; $queryString = http_build_query($queryParams, '', '&', PHP_QUERY_RFC3986); // 重新组合 URL $url = $baseUrl . '?' . $queryString; return $url; } catch (OssException $e) { error_log("OSS Error: " . $e->getMessage()); throw new \RuntimeException('OSS Error: ' . $e->getMessage()); } } }