客户给我分配了一项新任务,一个使用 MVC 设计模式制作的文档共享应用程序。以下是要求:
使用浏览器上传和下载文件
如果文件更安全,则将文件存储在 db 中,否则将文件存储在启用密码选项或无需密码即可访问的目录中
每个用户都将拥有自己的文档目录/工作区,他也可以从中与其他用户共享文档。和公共(public)共享区域共享和上传文件
super 管理员将能够监控文件上传日志记录以进行监控。
我有一个大概的想法,但我真的很想知道您对以上几点的看法,尤其是上面加粗的部分。
上面的第三点是最重要的,我不确定从哪里开始以及如何记录上传。
我基本上是在询问有关第三点和第四点的实现细节。
最佳答案
以下是我如何使用 CakePHP 实现它并且它运行良好。首先,我确保我的应用程序代码位于公共(public) html 目录之上,这样它就不会暴露在网络上。所以基本上,用户可以直接访问的唯一文件是 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 目录,因此我不必保护该目录。这意味着无论用户想要什么文件,他们都必须从网站访问它。
然后,您所要做的就是确保模型表有一个“可共享”标志,供用户指示该文件可供全世界访问,然后任何人都可以看到该文件并下载它。
关于php - 使用 MVC 的文档共享应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3502844/