Статьи
Утилиты Telegram YouTube Отзывы

Загрузка файлов в restful-сервисе на Spring Boot

Видеогайд

30 ноября 2021

Тэги: json, Kotlin, rest, Spring Boot, yaml, YouTube, файлы.

Содержание

  1. Эндпоинт
  2. Имитация загрузки файла с помощью Postman
  3. Увеличение лимитов на размер файла

Предположим, перед нами стоит задача сделать в restful-сервисе, написанном на Kotlin и Spring Boot, эндпоинт для загрузки файлов с фронтэнда. Для пользователя такая загрузка выглядит как кнопка выбора файла с надписью «Обзор». Далее выбранный файл отправляется на бэк как поток бинарных данных. Этот поток имеет тип данных multipart/form-data.

Данный материал также доступен в формате видео на YouTube.

Эндпоинт

Для реализации эндпоинта в минимальном варианте в нашем проекте должна быть всего одна зависимость spring-boot-starter-web. Заготовку проекта на Kotlin можно сгенерить с помощью Spring Initializr.

Сам контроллер будет выглядеть примерно так:

@RestController
@RequestMapping("/files")
class FileController {

    @PostMapping
    fun processFile(@RequestPart file: MultipartFile): List<String> =
        file
            .inputStream
            .bufferedReader()
            .readLines()
}

Наш обработчик мапится на POST-запрос на эндпоинт /files. Сам файл, загружаемый с фронта, подставляется в параметр с именем file. Этот параметр имеет тип данных MultipartFile и снабжён аннотацией @RequestPart. Далее мы обращаемся к содержимому файла с помощью поля inputStream. Этот поток бинарных данных мы оборачиваем в буфер с помощью метода расширения bufferedReader(). Ну и для примера просто считываем весь файл построчно с помощью опять-таки метода расширения readLines() и отдаём полученные строки в качестве ответа уже в стандартном формате json.

Важно отметить, что буферизация входного потока здесь нужна для повышения производительности в случае загрузки больших файлов. Тогда даже файлы из миллионов строк будут обрабатываться за считанные секунды.

Имитация загрузки файла с помощью Postman

Чтобы протестировать эндпоинт и не прикручивать полноценный фронтэнд, используйте Postman. Для отправки любого файла на наш эндпоинт выберите тип запроса POST и укажите адрес http://127.0.0.1:8080/files. Затем перейдите на вкладку Body и там выберите переключатель form-data. После чего в поле Key введите file (имя параметра нашего метода на бэке), затем тип параметра в выпадающем списке выберите File, после чего в поле Value появится кнопка для выбора файла.

В конце нажмите кнопку Send для отправки запроса. Обратите внимание, что загружаемый файл должен быть текстовым, чтобы мы смогли его корректно прочитать.

Увеличение лимитов на размер файла

Если выбрать текстовый файл, превышающий 10 Мб (стандартное ограничение Spring Boot), то можно получение ошибку о превышении лимита на размер файла. Тогда идём в папку resources нашего проекта, находим там файл application.properties и переименовываем его в application.yml, чтобы писать конфиг в yaml-формате. После чего добавим в него следующие параметры spring.servlet.multipart.max-file-size и spring.servlet.multipart.max-request-size:

spring:
  servlet:
    multipart:
      max-file-size: 30MB
      max-request-size: 30MB

Значения в мегабайтах выберите в зависимости от ваших потребностей. После этого проблем с загрузкой больших файлов быть не должно.



Комментарии

Добавить комментарий

×

devmark.ru