Как правильно загружать файлы в NestJs? Задача следующая, мне надо отправлять на сервер видео и загружать его в папочку, но при этом я хотел бы в запросе указывать мета-информацию для загрузки. Например, я хочу загрузить сериал, указать его название, название эпизодов, и т.д. Затем на сервере иметь возможность проверить по базе данных, а может быть сериал с таким названием уже существует? И тогда отменить загрузку.
Проблемы две.
1) Form-data парсится в NestJs через пень-колоду, поэтому отправить мета-информацию вместе с файлами через form-data у меня не получается. То есть получается, но тело запроса пустое. Для парсинга form-data используется Multer, но вся его задача состоит в загрузке файла, не более.
Отсюда выходит, что придётся отправлять два запроса, один с мета-информацией, а другой уже непосредственно с файлами.
Как реализовать такой запрос? Как иметь возможность принять на сервере один запрос, запомнить его данные и потом принять второй?
Или может есть какое-то более красивое решение...
2) Проблема в самом multer. Внутри функций, которые сохраняют файл нельзя получить доступ до сервисов неста, покрайней мере я не знаю как это сделать. То есть связаться с базой данных и проверить наличие файла не получится.
В общем, если кто-то реализовывал не просто отправку файлов на сервер и их «глупую» загрузку, а отправление файлов с мета-информацией и обработкой загрузки файла на основе этих мета-данных, помогите, пожалуйста советом.
Ну запарная и не очень удобная тема. Всё-таки заголовки для информации о запросе, то есть как бы информация необходимая http транспорту. Имхо это не место для логики приложения Дмитрий Беляев,
Я уже более менее решил свою проблему, написал костылину так сказать)) вообщем сделал интерсептор, который инжектит все необходимые зависимости неста, нужные для обработки логики загрузки файла.
Сделал копию инстанса этого интерсептора, чтобы можно было его пихать в Настройки multer. Ну и в самом multer уже имею доступ до всех инжектированных сущностей, в том числе до репозиториев бд.
А запрос парсится самим multer’ом, тут просто тема такая. Multer парусит поля запроса до тех пор, пока не найдёт нужный ему, в котором лежат файлы для загрузки. А вот если отправлять файлы для загрузки в последнем поле, то он распарсит все предыдущие и я буду иметь доступ до всего тела запроса