MultipartResolver
из пакета org.springframework.web.multipart
– это стратегия для парсинга многокомпонентных запросов, включая загрузку файлов. Существует одна реализация, основанная на FileUpload из проекта Commons, и другая, основанная на парсинге многокомпонентных запросов Servlet 3.0.
Чтобы активировать многокомпонентную обработку, необходимо объявить бин MultipartResolver
в конфигурации DispatcherServlet
из Spring под именем multipartResolver
. DispatcherServlet
обнаружит его и применит к входящему запросу. После получения POST с типом содержимого multipart/form-data
, распознаватель парсит содержимое, оборачивая текущий HttpServletRequest
как MultipartHttpServletRequest
, чтобы обеспечить доступ к распознанным файлам в дополнение к открытию компонентов как параметров запроса.
FileUpload
из Apache Commons
Чтобы использовать FileUpload
из Apache Commons, можно сконфигурировать бин типа CommonsMultipartResolver
под именем multipartResolver
. Также необходимо иметь jar-файл commons-fileupload
в качестве зависимости в вашем classpath.
Этот вариант распознавателя делегирует полномочия локальной библиотеке внутри приложения, обеспечивая максимальную межплатформенную переносимость между контейнерами сервлетов. Кроме того, можно использовать стандартное многокомпонентное распознавание сервлетов через собственный парсер контейнера, как описано ниже.
Commons FileUpload традиционно применяется только к POST-запросам, но принимает любой тип содержимого multipart/
. Подробности и параметры конфигурации см. в javadoc по CommonsMultipartResolver
.
Servlet 3.0
Многокомпонентный парсинг по спецификации Servlet 3.0 должен быть активирован в конфигурации контейнера сервлетов. Для этого:
-
В Java установите
MultipartConfigElement
на регистрацию сервлетов. -
В
web.xml
добавьте раздел"<multipart-config>"
к объявлению сервлетов.
В следующем примере показано, как настроить MultipartConfigElement
на регистрацию сервлетов:
public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
// ...
@Override
protected void customizeRegistration(ServletRegistration.Dynamic registration) {
// Опционально также устанавливает maxFileSize, maxRequestSize, fileSizeThreshold
registration.setMultipartConfig(new MultipartConfigElement("/tmp"));
}
}
class AppInitializer : AbstractAnnotationConfigDispatcherServletInitializer() {
// ...
override fun customizeRegistration(registration: ServletRegistration.Dynamic) {
// Опционально также устанавливает maxFileSize, maxRequestSize, fileSizeThreshold
registration.setMultipartConfig(MultipartConfigElement("/tmp"))
}
}
После того, как конфигурация Servlet 3.0 будет создана, вы сможете добавить бин типа StandardServletMultipartResolver
под именем multipartResolver
.
Этот вариант распознавания использует многокомпонентный парсер вашего контейнера сервлетов "как есть", потенциально подвергая приложение воздействию различий в реализации контейнера. По умолчанию анализатор будет пытаться парсить любой тип содержимого multipart/
с помощью любого HTTP-метода, но это может поддерживаться не всеми контейнерами сервлетов. Подробности и параметры конфигурации см. в javadoc по StandardServletMultipartResolver
.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ