Вы можете использовать свой собственный многочастный обработчик, который позволяет программно устанавливать максимальный размер загрузки. Например, используя ServletFileUpload
в вашем контроллере:
DiskFileItemFactory factory = new DiskFileItemFactory(thresholdBytes, tempDir);
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setFileSizeMax(maxFileSize);
for (FileItem item : upload.parseRequest(request)) {
// Save the file
File uploadedFile = new File(myPath);
item.write(uploadedFile);
}
Для большего контроля над обработкой потока вы можете использовать item.getInputStream()
и передавать байты, используя собственную потоковую логику.
Чтобы использовать это, вам нужно либо отключить стандартную обработку Spring по умолчанию с помощью spring.servlet.multipart.enabled = false
, либо spring.servlet.multipart.resolve-lazily = true
.
Второй вариант состоит в том, чтобы зарегистрировать несколько сервлетов, каждый из которых обрабатывает свой тип файла, и определить разные @MultipartConfig
(с указанием maxFileSize
и maxRequestSize
) для каждого. Затем выполните внутреннее перенаправление на сервлет для конкретного типа файла из вашего главного сервлета.