Задание
Реализовать простое REST API с одним единственным методом, который загружает изображения.
Требования:
- Возможность загружать несколько файлов.
- Возможность принимать multipart/form-data запросы.
- Возможность принимать JSON запросы с BASE64 закодированными изображениями.
- Возможность загружать изображения по заданному URL (изображение размещено где-то в интернете).
- Создание квадратного превью изображения размером 100px на 100px.
Реализация
Проект реализован на Spring Boot и для удобства написана простая html страница для того, чтобы можно было вызывать REST метод.
Приложение разбито на слои API, бизнес логика (service). (DAL-а нет)
Реализацию я разбил на два контроллера. Первый FileUploadController, в нем реализована сама задача. Второй FileDownloadController, в нем реализованы вспомогательные методы, такие как возвращает список изображений, которые уже загружены на сервер и скачивание данных изображений.
На вход целевого метода подается три вида аргументов, первый это список файлов, второй JSON, в коором находится список файлов в BASE64 кодировке и url по которому сервер должен скачать картинку сам.
Задача обработки разного вида аргументов разбивается на этапы по паттерну Visitor, каждый из которых отвечает за свой тип аргумента. Одновременно с сохранением изображения, на сервере создается файл превью 100х100px с именем 'имя файла'_thumbnail, этот файл появляется в списке всех загруженых изображений.
Поведение метода: если при загрузке одного файла произошла ошибка, то все предыдущие хорошо загруженные файлы удаляются
Структура проекта
-
pom.xml - главный pom файл проекта | server - серверная часть проекта | load-app - модуль приложения Spring, содержит точку входа в приложение и базовые конфигурационные файлы load-api - модуль слоя контроллеров REST-API load-service - модуль бизнес логики load-common - модуль содержит общие интерфейсы бизнес логики, а также DTO объекты
Проект реализован на SPRING Boot 2.0.5.RELEASE, написаны unit тесты и интеграционные тесты
BUILD :java_version: 1.8 Для сборки необходимо выполнить mvn clean install
RUN
Для запуска приложения необходимо запустить
В IDE - com.easy.upload.application.Application
Командной строкой:
java -jar load-app-0.1.0-SNAPSHOT.jar com.easy.upload.application.Application
После запуска можно открыть страницу по умолчанию http://localhost:8080/