2.3 KiB
Эндпоинт ожидает запрос с методом POST
, так как это загрузка файла.
При попытке подать не изображение pillow
вызывает исключение UnidentifiedImageError
,
но если подать gif
, то исключения не будет. Задача обрабатывать только png
и jpeg
,
так что в двух случаях выше возвращается HTTP_415_UNSUPPORTED_MEDIA_TYPE
.
Если же подать битый png
или jpeg
файл, то Image.resize
вызовет OSError
или SyntaxError
,
так что они отлавливаются отдельно. В таком случае возвращается HTTP_422_UNPROCESSABLE_ENTITY
.
Если будет какое-то другое исключение в этом блоке, то вернётся 500
ответ, так как,
по моим тестам, никакого другого исключения быть не должно. В этом блоке стоит добавить логирование, если оно имеется.
Саму обработку изображений я делаю через Celery
, так как это позволит не давать лишнюю CPU Bound
нагрузку на этот поток и работать в асинхронном режиме.
Далее генерируется уникальный UUID
для каждого изображения.
Использование UUID
позволяет не беспокоиться о том, что будет перезаписано старое изображение.
Далее генерируется POST
запрос через boto3
, отправляется готовое изображение на S3 бакет,
генерируется ссылка на него и возвращается в виде JSON
{"resized_image_link": response}
.
Если в этом блоке будет вызвано исключение, то ошибка никак не связанна с поданными данными,
соответственно не стоит давать лишнюю информацию по ней.
Возвращается HTTP_500_INTERNAL_SERVER_ERROR
без описания ошибки