Skip to content

semyonnakrokhin/file_storage

Repository files navigation

File Storage

File Storage - это сервер для хранения файлов с функционалом загрузки, получения метаинформации, скачивания и удаления файлов. Он предоставляет простой API для работы с файлами и хранит метаданные файлов в базе данных PostgreSQL. Аналогично Amazon S3, FileStorage поддерживает заголовки и метаданные файлов, однако отличается тем, что может быть развернут как локальный сервер, что делает его более доступным для небольших проектов или локальных применений.

Функциональные требования

Подробное описание представлено в Техническом Задании

  1. Загрузка файлов: Пользователи могут загружать файлы на сервер с помощью API запроса POST /api/v1/upload. При загрузке файлов пользователи могут указать идентификатор, имя и тег файла.
  2. Получение метаданных файлов: Сервер предоставляет API запрос GET /api/v1/get для получения метаданных файлов. Пользователи могут фильтровать файлы по различным критериям, таким как идентификатор, имя и тег файла. Для оптимизации производительности этот эндпоинт использует механизм кэширования. Результаты запросов к этому эндпоинту кэшируются использованием базы данных Redis для улучшения скорости обработки запросов. Это позволяет уменьшить нагрузку на сервер и ускорить ответы на повторяющиеся запросы.
  3. Удаление файлов: Сервер позволяет удалить файлы с помощью API запроса DELETE /api/v1/delete. Пользователи могут указать критерии для удаления файлов, и сервер удалит файлы, соответствующие этим критериям.
  4. Скачивание файлов: Пользователи могут скачать файлы с сервера с помощью API запроса GET /api/v1/download, указав идентификатор файла.

Запуск в контейнерах Docker

При запуске в контейнерах поднимается веб-сервер NGINX, который проксирует запросы на сервер приложений Uvicorn для обработки API запросов. Для отслеживания состояния базы данных Reids в отдельном контейнере поднимается служба Redis-Commander.

  1. Перейдите в директорию с вашими проектами.
  2. Склонируйте репозиторий на свой локальный компьютер:
# Linux
> https://github.com/semyonnakrokhin/file_storage.git
  1. Перейдите в каталог проекта:
# Linux
> cd file_storage
  1. В этой директории и в директории ./fastapi_app создайте файлы, перечисленные в environment.txt. В какой именно директории нужно создавать файл указано в квадратных скобках

  2. Выполните команду находясь в корневой директории проекта:

# Linux
> docker-compose up --build
  1. Откройте веб-браузер и перейдите по адресу http://localhost:1337/docs для доступа к веб-сервису в режиме Swgger. Для отслеживания информации в базе данных Redis, вы также можете использовать Redis Commander, который доступен на порту 8081. Просто откройте браузер и перейдите по адресу http://localhost:8081.

  2. Для остановки контейнеров выполните команду:

# Linux
> docker-compose down

Тестирование в контейнерах Docker

  1. Убедитесь, что в корневой директории есть все файлы, перечисленные в environment.txt

  2. Выполните команду находясь в корневой директории проекта:

# Linux
> docker-compose -f docker-compose_test.yaml up --build
  1. Для остановки контейнеров выполните команду:
# Linux
> docker-compose down

Вклад

Если вы хотите внести свой вклад в проект File Storge, пожалуйста, ознакомьтесь с CONTRIBUTING.md для получения дополнительной информации о том, как начать.

Авторы

Семен Накрохин [email protected]

Лицензия

Этот проект распространяется под лицензией MIT. Подробности смотрите в файле LICENSE.