/** * 静态方法, 单例统一访问入口 * @return object 返回对象的唯一实例 */ public static function getInstance() { if (is_null(self::$_instance) || !isset(self::$_instance)) { self::$_instance = new self(); } return self::$_instance; }
/** * 迷你存储报俊 * @param string $path 用户文件的存储路径 * @param string $signature 文件sha1 * @param int $size 文件大小,单位字节 * @param int $nodeId 迷你存储节点值 */ public function report($path, $signature, $size, $nodeId) { //防止重复文件通过网页上传,生成多条记录 $version = MiniVersion::getInstance()->getBySignature($signature); if (empty($version)) { //创建version/versionMeta数据 $pathParts = pathinfo($path); $type = MiniUtil::getMimeType($pathParts["basename"]); $version = MiniVersion::getInstance()->create($signature, $size, $type); MiniVersionMeta::getInstance()->create($version["id"], "store_id", $nodeId); //更新迷你存储节点状态,把新上传的文件数+1 PluginMiniStoreNode::getInstance()->newUploadFile($nodeId); //清理垃圾数据 PluginMiniBreakFile::getInstance()->deleteBySignature($signature); } //执行文件秒传逻辑 $filesController = new MFileSecondsController(); $filesController->invoke(); }
/** * 秒传接口 * @param array $params */ function fileSec($params) { $signature = $params["signature"]; $data['success'] = false; $data['store_type'] = "miniStore"; //查询断点文件表 $node = null; $breakFile = PluginMiniBreakFile::getInstance()->getBySignature($signature); if (!empty($breakFile)) { $node = PluginMiniStoreNode::getInstance()->getNodeById($breakFile["store_node_id"]); } //如果断点文件不存在或无效则重新分配一个存储节点 if (empty($node) || $node["status"] === -1) { $node = PluginMiniStoreNode::getInstance()->getUploadNode(); //更新断点表该文件的状态 PluginMiniBreakFile::getInstance()->create($signature, $node["id"]); } //回调地址 $callbackUrl = MiniHttp::getMiniHost() . "api.php?node_id=" . base64_encode($node["id"]); foreach ($params as $key => $value) { $callbackUrl .= "&" . $key . "=" . base64_encode(urlencode($value)); } $callbackUrl .= "&encode=base64"; $siteId = MiniSiteUtils::getSiteID(); $data['callback'] = $callbackUrl; //兼容127.0.0.1 $urlInfo = parse_url($node["host"]); if ($urlInfo["host"] == "127.0.0.1") { //说明迷你存储在本机,直接把127.0.0.1替换为迷你存储端口 $defaultHost = MiniHttp::getMiniHost(); $miniHostInfo = parse_url($defaultHost); $node['host'] = $miniHostInfo["scheme"] . "://" . $miniHostInfo["host"] . ":" . $urlInfo["port"] . $miniHostInfo["path"]; } $data['url'] = $node["host"] . "/api.php"; echo json_encode($data); exit; }