test_zadanie_S3/README.md
2024-03-23 14:09:12 +03:00

2.6 KiB
Raw Permalink Blame History

Сервис обработки изображений

Данный сервис принимает на вход изображения типа png или jpeg и необходимую ширину выходного изображения в пикселях(Опционально. По умолчанию 250 пикселей), изменяет размер изображения до указанной ширины сохраняя пропорции, загружает итоговое изображение на сервер AWS S3 и возвращает ссылку на загруженный файл.

Установка

Перед началом использования стоит убедиться, что у вас имеется готовый AWS S3 бакет.

Так же для работы Celery потребуется сервер Redis. Он может быть поднят отдельно, либо сразу со всем сервисом в докере.

В корне проекта создаём .env файл и заполняем в нём необходимые поля по примеру из .env_template

Далее устанавливаем всё необходимое.

pip install -r requirements.txt

---> 100%

В терминале пишем

celery -A app.tasks.celery:celery worker --loglevel=INFO

В другом терминале пишем

uvicorn app.main:app --reload

Теперь API доступен на http://localhost:8000/api/upload_image и документация на http://localhost:8000/docs

Установка в docker

Так же создаём .env файл и заполняем его всем необходимым

В поле REDIS_HOST указываем redis

В терминале пишем

docker compose build
docker compose up -d

API будет доступен на порте 9000

Пример использования

import requests


def send_image(image_path: str, target_width: int) -> None:
    with open(image_path, 'rb') as file:
        file_data = file.read()

    url = f'http://localhost:9000/api/upload_image/?target_width={target_width}'

    response = requests.post(url, files={'file': file_data})

    if response.status_code == 200:
        link = response.json()["resized_image_link"]
        print("Файл успешно отправлен!", link, sep="\n")
    else:
        print("Ошибка при отправке файла:", response.status_code, response.json()["detail"])


if __name__ == "__main__":
    send_image("image.png", 300)