'', 'secret_key' => '', 'bucket' => '', 'domain' => '', 'path_prefix' => '', ]; /** * 注入解密后的运行时配置 */ public function withConfig(array $config): static { $this->config = array_merge($this->config, $config); return $this; } public function uploadImage($filePath, string $key): bool|array { return $this->uploadFile($filePath, $key); } public function uploadVideo($filePath, string $key): bool|array { return $this->uploadFile($filePath, $key); } public function deleteImage($key): bool { return $this->deleteFile($key); } public function deleteVideo($key): bool { return $this->deleteFile($key); } /** * 上传到七牛;无 SDK 时抛业务异常引导安装或改本地 */ private function uploadFile($filePath, string $key): bool|array { if (!class_exists(\Qiniu\Auth::class)) { UtilsService::getInstance()->errorThrow('未安装 qiniu/php-sdk,请改用本地存储或安装依赖'); } $accessKey = (string) ($this->config['access_key'] ?? ''); $secretKey = (string) ($this->config['secret_key'] ?? ''); $bucket = (string) ($this->config['bucket'] ?? ''); $domain = rtrim((string) ($this->config['domain'] ?? ''), '/'); if ($accessKey === '' || $secretKey === '' || $bucket === '') { UtilsService::getInstance()->errorThrow('七牛云配置不完整'); } $prefix = trim((string) ($this->config['path_prefix'] ?? ''), '/'); if ($prefix !== '' && !str_starts_with($key, $prefix . '/')) { $key = $prefix . '/' . ltrim($key, '/'); } $path = is_object($filePath) && method_exists($filePath, 'getRealPath') ? $filePath->getRealPath() : (string) $filePath; $auth = new \Qiniu\Auth($accessKey, $secretKey); $token = $auth->uploadToken($bucket); $uploadMgr = new \Qiniu\Storage\UploadManager(); list($ret, $err) = $uploadMgr->putFile($token, $key, $path); if ($err !== null) { return false; } return [ 'key' => $ret['key'], 'url' => $domain . '/' . $ret['key'], ]; } private function deleteFile(string $key): bool { if (!class_exists(\Qiniu\Auth::class)) { return false; } $auth = new \Qiniu\Auth($this->config['access_key'], $this->config['secret_key']); $bucketMgr = new \Qiniu\Storage\BucketManager($auth); $err = $bucketMgr->delete($this->config['bucket'], $key); return $err === null; } }