使用MVC的文档共享应用程序

时间:2010-08-17 13:24:23

标签: php model-view-controller projects-and-solutions

我已经为客户分配了一个新任务,即使用MVC设计模式创建的文档共享应用程序。以下是要求:

  • 使用浏览器上传和下载文件

  • 如果文档更安全,则将文档存储在数据库中,否则存储在目录中,并启用密码选项或无密码访问

  • 每个用户都有自己的文档目录/工作区,他也可以在这里与其他用户共享文档。和公共共享区域共享和上传文件

  • 超级管理员可以监控文件上传日志以进行监控。

我有一个粗略的想法,但我真的想知道你对上述观点的看法,特别是那些粗体的观点。

上面的第三点是最重要的,我不知道从哪里开始以及如何记录上传。

我基本上要求有关第三和第四点的实施细节。

1 个答案:

答案 0 :(得分:3)

以下是我使用CakePHP实现这一点的方法,它运行良好。首先,我确保我的应用程序代码位于公共html目录之上,以便它不会暴露给Web。基本上,用户可以直接访问的唯一文件是index.php文件,css / js和图像文件。

然后,我更新了我的文件管理模型,以便即时保存和删除文件:

function beforeSave() {
    extract($this->data['Upload']['file']);
    if(isset($name) and !empty($name)) {
        $filename = time().'-'.$name;
        if ($size && !$error) {
            move_uploaded_file($tmp_name, APP . 'media/files/' . $filename);
            $this->data['Upload']['file'] = $filename;
            $this->data['Upload']['name'] = $name;
            $this->data['Upload']['file_type'] = $type;
        }
    } else {
        // remove the photo so it is not updated
        unset($this->data['Upload']['file']);
    }
    return parent::beforeSave();
}

function beforeDelete() {
    $data = $this->read(null, $this->id);
    if( is_file( APP . 'media/files/' . $data['Upload']['file'])) {
        unlink(APP . 'media/files/' . $data['Upload']['file']);
    }
    return true;
}

这将管理文件上载并将所有命名信息放入数据库。由于Web无法访问app / media / files目录,因此我无需保护目录。这意味着无论用户想要什么文件,他们都必须从网站访问它。

然后,您所要做的就是确保模型表具有“可共享”标志,以便用户指示该文件可供全世界访问,然后任何人都可以看到该文件并下载它。