/** * 静态方法, 单例统一访问入口 * @return object 返回对象的唯一实例 */ public static function getInstance() { if (is_null(self::$_instance) || !isset(self::$_instance)) { self::$_instance = new self(); } return self::$_instance; }
/** *根据文件的Hash值下载内容 * @param string $signature 文件hash值 * @throws 404错误 */ public function downloadTxt($signature) { $version = MiniVersion::getInstance()->getBySignature($signature); if (!empty($version)) { //根据文件内容输出文件内容 $meta = MiniVersionMeta::getInstance()->getMeta($version["id"], "doc_id"); if (!empty($meta)) { $url = PluginMiniDocNode::getInstance()->getDownloadUrl($meta["meta_value"], $version, "txt"); if (!empty($url)) { header("HTTP/1.1 " . MConst::HTTP_CODE_301 . " Moved Permanently"); header("Location: " . $url); exit; } } else { //文本类文件直接下载 MiniFile::getInstance()->getContentBySignature($signature, $signature, $version["mime_type"]); } } throw new MFileopsException(Yii::t('api', 'File Not Found'), 404); }
/** * 把文档进行转换 * @param array $version * @param string $mimeType 如mineType为空,则使用version.mime_type */ private function pushFileConvert($version, $mimeType) { if (empty($mimeType)) { $mimeType = $version["mime_type"]; } $miniHost = PluginMiniDocOption::getInstance()->getMiniyunHost(); $siteId = MiniSiteUtils::getSiteID(); $signature = $version["file_signature"]; $node = PluginMiniDocNode::getInstance()->getConvertNode($signature); if (!empty($node)) { $url = $node["host"] . '/api.php?route=file/convert'; $downloadUrl = $miniHost . "api.php?route=module/miniDoc/download&signature=" . $signature; $callbackUrl = $miniHost . "api.php?route=module/miniDoc/report&node_id=" . $node["id"] . "&signature=" . $signature; $data = array('signature' => $signature, 'site_id' => $siteId, 'mime_type' => $mimeType, 'download_url' => $downloadUrl, "callback_url" => $callbackUrl); $http = new HttpClient(); $http->post($url, $data); $result = $http->get_body(); $result = json_decode($result, true); if ($result['status'] == 1) { $this->updateDocConvertStatus($node["id"], $version["file_signature"], 1); } } }
/** * 定时任务入口 * 场景1:检查各个迷你云节点状态 * 使用方式:每隔15秒执行一次 */ public function actionCheckNodeStatus() { PluginMiniDocNode::getInstance()->checkNodesStatus(); }
/** * 修改迷你文档节点状态 * @param string $name 节点名称 * @param string $status 节点状态 * @throws MiniException */ public function modifyNodeStatus($name, $status) { $node = PluginMiniDocNode::getInstance()->getNodeByName($name); if (empty($node)) { throw new MiniException(100203); } if ($status == 1) { //检查服务器状态,看看是否可以连接迷你文档服务器 $nodeStatus = PluginMiniDocNode::getInstance()->checkNodeStatus($node["host"]); if ($nodeStatus == -1) { throw new MiniException(100204); } } return PluginMiniDocNode::getInstance()->modifyNodeStatus($name, $status); }