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
.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ