config['first_directory'] . '/' . $cos_file_dirname . '/' . $cos_file_name; // 存储桶名称,由BucketName-Appid 组成 $bucket = $this->config['bucket_name']; try { $cosClient = new \Qcloud\Cos\Client([ 'region' => $this->config['region'], // 协议头部,默认为http 'schema' => Request::scheme(), 'credentials' => [ 'secretId' => $this->config['secret_id'], 'secretKey' => $this->config['secret_key'] ] ]); $body = fopen($local_file_url, 'rb'); // 上传对象 $result = $cosClient->upload($bucket, $object, $body); $result = $this->resultToArray($result); // 记录日志 $uid = defined('UID') ? UID : ''; platformLog([ 'bucket' => $bucket, 'key' => $object, 'local_file_url' => $local_file_url ], $result, 'tencent_cos_upload_file_uid_' . $uid); if ($is_delete_file) { // 删除原文件 unlink($local_file_url); } // 返回成功数据 return 'https://' . $result['Location']; } catch (\Exception $e) { $result['Code'] = 5000; $result['Message'] = $e->getMessage(); // 记录日志 $uid = defined('UID') ? UID : ''; platformLog([ 'bucket' => $bucket, 'key' => $object, 'local_file_url' => $local_file_url ], $result, 'tencent_cos_upload_file_uid_' . $uid); return $result; } } /** * 将object下载到服务器指定的文件 * @param string $object object(开头没有'/') * @param string $local_file_url 本地存储路径,填写的时候以'./'开头 * @date 2022-11-29 */ public function download($object, $local_file_url = '') { // 判断$object是否为带http连接的全路径 if (strpos($object, 'https://') !== false || strpos($object, 'http://') !== false) { // 分割字符串 $array = explode('://', $object); // 获取第1个/之后的字符串即为$object $index = strpos($array[1], '/'); $object = substr($array[1], $index + 1); } // 获取文件后缀名 $suffix = get_suffix($object); // 没有定义本地存储路径的时候,自动生成文件保存的本地路径 if (!$local_file_url) { $local_file_url = './temp/' . md5(microtime(true)) . '.' . $suffix; } // 没有文件夹则先生成 create_directory($local_file_url); // 存储桶名称,由BucketName-Appid 组成 $bucket = $this->config['bucket_name']; try { // 实例化 $cosClient = new \Qcloud\Cos\Client([ 'region' => $this->config['region'], // 协议头部,默认为http 'schema' => Request::scheme(), 'credentials' => [ 'secretId' => $this->config['secret_id'], 'secretKey' => $this->config['secret_key'] ] ]); // 下载 $result = $cosClient->download($bucket, $object, $local_file_url); // 结果转为数组 $result = $this->resultToArray($result); // 记录日志 $uid = defined('UID') ? UID : ''; platformLog([ 'bucket' => $bucket, 'key' => $object, 'local_file_url' => $local_file_url ], $result, 'tencent_cos_get_object_uid_' . $uid); // 返回成功数据 return [ // 本地路径 'local_file_url' => $local_file_url, // 带域名的本地路径 'domain_local_file_url' => Request::domain(true) . substr($local_file_url, 1) ]; } catch (\Exception $e) { // 返回报错 $result['Code'] = 5000; $result['Message'] = $e->getMessage(); // 记录日志 $uid = defined('UID') ? UID : ''; platformLog([ 'bucket' => $bucket, 'key' => $object, 'local_file_url' => $local_file_url ], $result, 'tencent_cos_get_object_uid_' . $uid); // 返回错误数据 return $result; } } /** * 删除cos文件 * @param string $object object路径,已包含项目文件夹路径 * @date 2022-11-29 */ function deleteObject($object) { // 判断$object是否为带http连接的全路径 if (strpos($object, 'https://') !== false || strpos($object, 'http://') !== false) { // 分割字符串 $array = explode('://', $object); // 获取第1个/之后的字符串即为$object $index = strpos($array[1], '/'); $object = substr($array[1], $index + 1); } // 存储桶名称,由BucketName-Appid 组成 $bucket = $this->config['bucket_name']; try { // 实例化 $cosClient = new \Qcloud\Cos\Client([ 'region' => $this->config['region'], // 协议头部,默认为http 'schema' => Request::scheme(), 'credentials' => [ 'secretId' => $this->config['secret_id'], 'secretKey' => $this->config['secret_key'] ] ]); // 下载 $result = $cosClient->deleteObject([ 'Bucket' => $bucket, 'Key' => $object ]); // 结果转为数组 $result = $this->resultToArray($result); // 记录日志 $uid = defined('UID') ? UID : ''; platformLog([ 'bucket' => $bucket, 'key' => $object ], $result, 'tencent_cos_delete_object_uid_' . $uid); // 返回成功数据 return $result; } catch (\Exception $e) { // 返回报错 $result['Code'] = 5000; $result['Message'] = $e->getMessage(); // 记录日志 $uid = defined('UID') ? UID : ''; platformLog([ 'bucket' => $bucket, 'key' => $object ], $result, 'tencent_cos_delete_object_uid_' . $uid); // 返回错误数据 return $result; } } }