/**
  * 静态方法, 单例统一访问入口
  * @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();
 }
Example #3
0
 /**
  * 秒传接口
  * @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;
 }