代码之家  ›  专栏  ›  技术社区  ›  Sarfraz

MVC文档共享应用程序

  •  3
  • Sarfraz  · 技术社区  · 14 年前

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

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

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

    • 超级管理员将能够监控文件 上载日志记录

    我有个大概的想法,但我真的很想知道你对以上几点的看法,尤其是上面的黑体字。

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

    我基本上是询问关于第三点和第四点的实施细节。

    1 回复  |  直到 6 年前
        1
  •  3
  •   Chuck Burgess    14 年前

    下面是我如何用CakePHP实现这一点,它工作得很好。首先,我确保我的应用程序代码位于公共html目录之上,这样它就不会暴露在web上。基本上用户只能直接访问文件索引.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;
    }
    

    这将管理文件上载并将所有命名信息放入数据库。而且由于app/media/files目录对web是不可访问的,所以我不必保护该目录。这意味着无论用户想要什么文件,他们都必须从网站上访问它。