Приложение для обмена документами с MVC - PullRequest
3 голосов
/ 17 августа 2010

Клиенту было назначено новое задание, приложение для обмена документами, которое должно быть выполнено с использованием шаблона проектирования MVC. Вот требования:

  • Загружает и скачивает файлы с помощью браузера

  • Хранить документ в дБ, если это более безопасные документы, либо хранить в каталоге с включенными или доступными параметрами пароля без пароля

  • У каждого пользователя будет собственный каталог документов / рабочее пространство, из которого он также сможет обмениваться документами с другими пользователями. и общедоступная общая область для обмена и загрузки файлов

  • Супер администратор сможет отслеживать файл загружать журнал для целей мониторинга.

У меня есть грубая идея, но мне бы очень хотелось узнать ваши мысли о вышеупомянутых моментах, особенно о том, что там выделено жирным шрифтом.

Третий пункт выше является наиболее важным, и я не уверен, с чего начать и как вести загрузку.

Я в основном спрашиваю детали реализации третьего и четвертого пунктов.

1 Ответ

3 голосов
/ 17 августа 2010

Вот как я реализую это с помощью CakePHP, и она прекрасно работает. Во-первых, я проверяю, что код моего приложения находится над общедоступным каталогом html, чтобы он не был доступен в Интернете. Таким образом, в основном, единственные файлы, к которым пользователи имеют прямой доступ, - это файл index.php, файлы css / js и image.

Затем я обновляю свою модель управления файлами, чтобы сохранять и удалять файлы на лету:

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 недоступен для Интернета, мне не нужно защищать каталог. Это означает, что независимо от того, какой файл пользователь хочет, он должен получить к нему доступ с веб-сайта.

Затем все, что вам нужно сделать, - это убедиться, что в таблице моделей есть флаг "общего доступа", чтобы пользователь мог указать, что файл доступен для всего мира, и тогда любой желающий сможет увидеть файл и загрузить его.

...