| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- <?php
- namespace common\components;
- use OSS\Core\OssException;
- use OSS\OssClient;
- use Yii;
- class oss
- {
- // 文件夹常量数组: 1. uploads_pic_text -- 图文专用文件夹 2.
- /** 允许自定义的 OSS 根目录白名单 */
- const ROOT_PATHS = ['uploads_pic_text', 'uploads_home_banner', 'uploads_home_nav'];
- //上传文件
- public static function uploadImage($object, $filePath)
- {
- $ossClient = self::getOssClient();
- $bucket = Yii::$app->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;
- }
- }
|