Хранение файлов

Все файлы в системе хранятся в базе данных MongoDb через GridFs. Почему выбрано такое решение:

  1. Любое получение и изменение файлов происходит через обращение к базе посредством вызова серверного API, что позволяет настроить систему прав

  2. Упрощение механизмов резервного копирования

  3. Унификация компонентов использующих файлы

Настройки модуля прописываются в основном конфигурационном файле в разделе gridfs

, gridfs           : {
    host:'localhost',
    dbname:'ugmk_files'
}

Рекомендуется использовать отдельную базу данных.

На серверной стороне реализация работы с файлами находится в src/gfs.js. Список используемых маршрутов:

post('/api/gfs', multer({ dest: os.tmpdir()}).single('file'),function (req, res, next){}) // добавление
get('/api/gfs/remove/:id', function (req, res, next) {}) // удаление
get('/api/gfs/download/:id', function (req, res, next) {}) // скачивание
get('/api/gfs/:id', function (req, res, next) {}) // получение контента файла

Кроме маршрутов, библиотека предоставляет несколько полезных методов для работы с файлами:

CopyFile = function (id, done) // копирование файла
ToDisk = function (id, dir, done) // сохранение файла из базы на диск

На стороне клиента доступны следующие

  1. Шаблон редактирования file - подробнее об использовании шаблонов в редактировании моделей смотрите в разделе формы редактирования

  2. Шаблон редактирования form_image - для добавления картинок

  3. Custom binding user_avatar

  4. Custom binding FileUpload

  5. Метод сохранение файлов MModels.SaveFileToGfs

Пример кода, используемого в модуле filemanager:

В данном примере перед тем как отправить форму на сохранение, предварительно на сервер отправляется файл. Если при добавлении файла не произошло ошибки, то вторым этапом отправляется форма, в теле которой передается id добавленного файла.

Last updated

Was this helpful?