Данное творение ничто иное, как удаленное хранилище файлов, построеное по технологии gRPC
Возможности:
- Загужать файлы
- Скачивать файлы
- Получить список всех файлов на сервере
Момент превозмогания...
В качестве отслеживания загружаемых файлов используется CSV-таблица, которая хранит UUID файла и его название. Сделано это было во избежание файловых коллизий, когда загружаются два файла с одинаковым названием. Поэтому для скачивания файла указываются его название и UUID.
Решение не идеальное, но, в рамках проекта, рабочее. По хорошему, если развивать идею, нужно заводить отдельную систему
с версионированием File->Version->Content а-ля гит для файлов с привязкой к юзеру, которая избавит проблем с коллизиями,
где, вкратце, File - родительская сущность, Version - очередной дубликат, Content - сам файл.
P.S.
Некоторые параметры захардкожены, при сохранении информации о файле в БД UUID переводится в строку. Так делать нельзя, но для демонстрации сгодится.
❗ Все команды выполняются из корневой директории проекта
Собираем клиент:
make clientТак как в проекте уже лежат сгенерированные файлы, можно сразу приступить к поднятию докера.
Однако если в file_transfer.proto были внесены изменения, то выполняем следующее:
make genПоднимаем докер
docker-compose up -d --buildВзаимодействие с ручками происходит средствами аргументов командной строки, описанных ниже.
Пример:
./client --action=upload --file=./files_storage/simple.jsonПараметры:
--server- путь до gRPC сервера. По дефолтуlocalhost:50051--action- команда к действию. Ниже описаны доступные команды--file- путь до файла включая название с расширением--filename- название файла для скачивания--id- айди файла для скачивания
Доспупные команды для --action:
upload- загрузка файла на сервер. Обязателен параметр--filedownload- скачивание файла с сервера. Обязательны параметры--filenameи--idlist- получение списка файлов, хранящихся на сервере в видеимя файла | дата создания | дата модификации