params['ossBucket']; if (empty($bucket)) { util::fail('OSS Bucket 未配置'); } if (empty($filePath) || !is_file($filePath) || !is_readable($filePath)) { util::fail('本地上传文件不存在或不可读'); } try { $ossClient->uploadFile($bucket, $object, $filePath); } catch (OssException $e) { $httpStatus = $e->getHTTPStatus(); $errorCode = $e->getErrorCode(); $requestId = $e->getRequestId(); $body = (string)$e->getDetails(); Yii::error(sprintf( 'OSS uploadImage failed: object=%s bucket=%s http=%s code=%s requestId=%s msg=%s body=%s', $object, $bucket, $httpStatus, $errorCode, $requestId, $e->getMessage(), substr($body, 0, 500) ), __METHOD__); // SDK 在空响应时 getMessage() 仅为 ": RequestId: ",补充可读信息 $msg = trim($e->getMessage()); if ($msg === '' || $msg === ': RequestId:' || preg_match('/^:\s*RequestId:\s*$/', $msg)) { $parts = array_filter([ $httpStatus !== '' ? ('HTTP ' . $httpStatus) : '', $errorCode !== '' ? $errorCode : '', $requestId !== '' ? ('RequestId: ' . $requestId) : '', ]); $msg = $parts ? ('OSS上传失败: ' . implode(', ', $parts)) : 'OSS上传失败,未返回错误详情'; if ($body !== '') { $msg .= ' (' . substr(strip_tags($body), 0, 120) . ')'; } } util::fail($msg); } return true; } public static function uploadContent($object,$content) { $ossClient = self::getOssClient(); $bucket = Yii::$app->params['ossBucket']; try { $ossClient->putObject($bucket, $object, $content); } catch (OssException $e) { util::fail($e->getMessage()); } return true; } public static function getOssClient() { $accessKeyId = Yii::$app->params['accessKeyId']; $accessKeySecret = Yii::$app->params['accessKeySecret']; $endpoint = Yii::$app->params['endpoint']; // 未带协议时强制走 HTTPS,避免 HTTP:80 PUT 被中间网络截断(unexpected EOF) if (strpos($endpoint, 'http://') !== 0 && strpos($endpoint, 'https://') !== 0) { $endpoint = 'https://' . ltrim($endpoint, '/'); } try { $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); return $ossClient; } catch (OssException $e) { util::fail($e->getMessage()); } } //判断文件是否存在 ssh 2021.4.18 public static function getFile($object) { $ossClient = self::getOssClient(); $bucket = Yii::$app->params['ossBucket']; try { return $ossClient->getObject($bucket, $object); } catch (OssException $e) { util::fail($e->getMessage()); } } //判断文件是否存在 ssh 2021.4.18 public static function fileExist($object) { $ossClient = self::getOssClient(); $bucket = Yii::$app->params['ossBucket']; $ossClient->doesObjectExist($bucket, $object); try { return $ossClient->doesObjectExist($bucket, $object); } catch (OssException $e) { util::fail($e->getMessage()); } } // oss水印 guoruidian 2021.5.16 // oss::watermark('fdafas.jpg', [ // 'image_xxx,size_20,g_sw,x_100,y_50', // 'text_xxx,color_0000b7,size_20,g_sw,x_100,y_50', // ]) public static function watermark($object, array $process) { return Yii::$app->params['hdImgHost']. $object . "?x-oss-process=image/watermark,". implode('/watermark,', $process); } //上传语音 public static function uploadTmpAudio($object, $filePath,$bucket = '') { $ossClient = self::getOssClient(); $bucket = Yii::$app->params['ossBucket']; try { $ossClient->putObject($bucket, $object, $filePath); } catch (OssException $e) { util::fail($e->getMessage()); } return true; } //删除文件 public static function deleteObject($object) { $ossClient = self::getOssClient(); $bucket = Yii::$app->params['ossBucket']; try { $ossClient->deleteObject($bucket, $object); } catch (OssException $e) { util::fail($e->getMessage()); } return true; } //批量删除文件 public static function deleteObjects($objects) { $ossClient = self::getOssClient(); $bucket = Yii::$app->params['ossBucket']; try { $ossClient->deleteObjects($bucket, $objects); } catch (OssException $e) { util::fail($e->getMessage()); } return true; } }