config['first_directory'] . '/' . $oss_file_dirname . '/' . $oss_file_name; $options = []; // 如果上传文件之后需要删除源文件,上传文件时设置回调 if ($is_delete_file) { $url = [ // callbackUrl为回调服务器地址 'callbackUrl' => Request::domain() . '/index.php/base/oss/platform/Callback/uploadCallback', // 发起回调时请求body的值,支持OSS系统变量、自定义变量和常量 'callbackBody' => 'bucket=${bucket}&object=${object}&file_path=${x:file_path}', // 发起回调请求的Content-Type 'callbackBodyType' => 'application/x-www-form-urlencoded' ]; $url = json_encode($url); // 设置发起回调请求的自定义参数,由Key和Value组成,Key必须以x:开始。会将这些参数和上述的系统参数一起放在POST请求的body中以方便接收回调方获取。 $var = [ 'x:file_path' => $local_file_path ]; $var = json_encode($var); $options = [ OssClient::OSS_CALLBACK => $url, OssClient::OSS_CALLBACK_VAR => $var ]; } try { // 初始化 $ossClient = $this->createClient(); // 上传文件 - 简单上传 $result = $ossClient->uploadFile($this->config['bucket'], $object, $local_file_path, $options); // 记录日志 $uid = defined('UID') ? UID : ''; platformLog([ 'bucket' => $this->config['bucket'], 'object' => $object, 'local_file_path' => $local_file_path, 'is_delete_file' => true ], $result, 'ali_oss_upload_file_uid_' . $uid); // 返回成功数据 return $result['info']; } catch (OssException $e) { // 返回报错 $result['Code'] = 5000; $result['Message'] = $e->getMessage(); // 记录日志 $uid = defined('UID') ? UID : ''; platformLog([ 'bucket' => $this->config['bucket'], 'object' => $object, 'local_file_path' => $local_file_path, 'is_delete_file' => true ], $result, 'ali_oss_upload_file_uid_' . $uid); // 返回错误数据 return $result; } } /** * 将object下载到服务器指定的文件 * @param string $object object(开头没有'/') * @param string $local_file_url 本地存储路径,填写的时候以'./'开头 * @date 2022-12-08 */ public function getObject($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); $options = [ // 指定本地路径 OssClient::OSS_FILE_DOWNLOAD => $local_file_url ]; try { // 初始化 $ossClient = $this->createClient(); // 下载文件 $result = $ossClient->getObject($this->config['bucket'], $object, $options); // 记录日志 $uid = defined('UID') ? UID : ''; platformLog([ 'bucket' => $this->config['bucket'], 'object' => $object, 'local_file_url' => $local_file_url, 'domain_local_file_url' => Request::domain(true) . substr($local_file_url, 1) ], $result, 'ali_oss_get_object_uid_' . $uid); // 返回成功数据 return [ // 本地路径 'local_file_url' => $local_file_url, // 带域名的本地路径 'domain_local_file_url' => Request::domain(true) . substr($local_file_url, 1) ]; } catch (OssException $e) { // 返回报错 $result['Code'] = 5000; $result['Message'] = $e->getMessage(); // 记录日志 $uid = defined('UID') ? UID : ''; platformLog([ 'bucket' => $this->config['bucket'], 'object' => $object, 'local_file_url' => $local_file_url, 'domain_local_file_url' => Request::domain(true) . substr($local_file_url, 1) ], $result, 'ali_oss_get_object_uid_' . $uid); // 返回错误数据 return $result; } } /** * 删除oss文件 * @param string $object object路径,已包含项目文件夹路径 * @date 2022-12-08 */ 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); } try { // 初始化 $ossClient = $this->createClient(); // 删除文件 $result = $ossClient->deleteObject($this->config['bucket'], $object); // 记录日志 $uid = defined('UID') ? UID : ''; platformLog([ 'bucket' => $this->config['bucket'], 'object' => $object ], $result, 'ali_oss_delete_object_uid_' . $uid); // 返回成功数据 return $result['info']; } catch (OssException $e) { // 返回报错 $result['Code'] = 5000; $result['Message'] = $e->getMessage(); // 记录日志 $uid = defined('UID') ? UID : ''; platformLog([ 'bucket' => $this->config['bucket'], 'object' => $object ], $result, 'ali_oss_delete_object_uid_' . $uid); // 返回错误数据 return $result; } } }