Увеличить HTTP-сообщение maxPostSize в Spring Загрузка
У меня довольно простое Spring загрузочное веб-приложение, у меня есть одна HTML-страница с формой с enctype="multipart/form-data"
. Я получаю эту ошибку:
В запросе с несколькими частями содержатся данные параметров (за исключением загруженных файлов), которые превышают предел для maxPostSize, установленного на соответствующем соединителе.
Я использую Spring загруженный по умолчанию сервер tomcat. По-видимому, значение по умолчанию maxPostSize
равно 2 мегабайтам. Есть ли способ редактировать это значение? Сделать это с помощью application.properties
было бы лучше, вместо того, чтобы создавать настраиваемые beans или беспорядок с XML файлами.
Ответы
Ответ 1
Найден решение. Добавьте этот код в тот же класс, что и SpringApplication.run.
// Set maxPostSize of embedded tomcat server to 10 megabytes (default is 2 MB, not large enough to support file uploads > 1.5 MB)
@Bean
EmbeddedServletContainerCustomizer containerCustomizer() throws Exception {
return (ConfigurableEmbeddedServletContainer container) -> {
if (container instanceof TomcatEmbeddedServletContainerFactory) {
TomcatEmbeddedServletContainerFactory tomcat = (TomcatEmbeddedServletContainerFactory) container;
tomcat.addConnectorCustomizers(
(connector) -> {
connector.setMaxPostSize(10000000); // 10 MB
}
);
}
};
}
Изменить: Очевидно, добавление этого в файл application.properties также увеличивает maxPostSize, но я не пробовал его сам, поэтому не могу подтвердить.
multipart.maxFileSize=10Mb # Max file size.
multipart.maxRequestSize=10Mb # Max request size.
Ответ 2
В файле application.properties напишите это:
# Max file size.
spring.http.multipart.max-file-size=1Mb
# Max request size.
spring.http.multipart.max-request-size=10Mb
Отрегулируйте размер в соответствии с вашими потребностями.
Обновить
Примечание. Начиная с Spring Boot 2, теперь вы можете делать
# Max file size.
spring.servlet.multipart.max-file-size=1MB
# Max request size.
spring.servlet.multipart.max-request-size=10MB
Приложение А. Общие свойства приложения - Spring
Ответ 3
Если вы используете в своих запросах POST использование медиатипа x-www-form-urlencoded (как и я), свойство multipart Spring-boot не работает. Если ваше приложение весенней загрузки также запускает tomcat, вам нужно установить следующее свойство в файле application.properties:
# Setting max size of post requests to 6MB (default: 2MB)
server.tomcat.max-http-post-size=6291456
Я не мог найти эту информацию нигде в документации весенней загрузки. Надеюсь, это поможет любому, кто также придерживается кодировки тела в формате x-www-form-urlencoded.
Ответ 4
из документации: https://spring.io/guides/gs/uploading-files/
Настройки загрузки файлов
При настройке загрузки файлов часто бывает полезно установить ограничения на размер файлов. Представьте, что вы пытаетесь обработать файл размером 5 ГБ! С помощью Spring Boot мы можем настроить его автоматически настроенный MultipartConfigElement с некоторыми настройками свойств.
Добавьте следующие свойства в существующие src/main/resources/application.properties
:
spring.http.multipart.max-file-size=128KB
spring.http.multipart.max-request-size=128KB
Составные параметры ограничены следующим образом:
-
spring.http.multipart.max-file-size is set to 128KB
, что означает, что общий размер файла не может превышать 128 КБ.
-
spring.http.multipart.max-request-size
имеет значение 128 КБ, что означает, что общий размер запроса для данных multipart/form-data не может превышать 128 КБ.
Ответ 5
Существует некоторая разница, когда мы определяем свойства в application.yaml
и application.properties
.
В application.yml
:
spring:
http:
multipart:
max-file-size: 256KB
max-request-size: 256KB
И в application.propeties
:
spring.http.multipart.max-file-size=128KB
spring.http.multipart.max-request-size=128KB
Примечание: Spring версия 4.3 и Spring boot 1.4
Ответ 6
Сначала убедитесь, что вы используете spring.servlet
вместо spring.http
.
---
spring:
servlet:
multipart:
max-file-size: 10MB
max-request-size: 10MB
Если вам нужно использовать tomcat, вы можете создать EmbeddedServletContainerCustomizer, что не очень приятно делать.
Если вы можете жить без томата, вы можете заменить tomcat, например. взяться за и избежать этой проблемы.
Ответ 7
Применение настроек для Tomcat и сервлета
Вы можете установить максимальный размер сообщения для Tomcat в application.properties
, который устанавливается с помощью int, как показано ниже. Простая настройка spring.servlet.multipart.max-request-size=10MB
, как и в некоторых других ответах, может быть недостаточной.
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB
server.tomcat.max-http-post-size=100000000
server.tomcat.max-swallow-size=100000000
Работа с Spring Boot 2.0.5.RELEASE
Ответ 8
Ни одно из решений не сработало для меня, и большинство из них являются просто оффтопами, потому что OP говорит о maxPostSize, а не maxFileSize (последний в любом случае выдает другую ошибку, если размер превышен)
Решение: в /tomcat/conf/server.xml добавьте атрибут maxPostSize = "" в Connector
<!-- A "Connector" represents an endpoint by which requests are received
and responses are returned. Documentation at :
Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
Java AJP Connector: /docs/config/ajp.html
APR (HTTP/AJP) Connector: /docs/apr.html
Define a non-SSL/TLS HTTP/1.1 Connector on port 8080
-->
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
maxPostSize="10485760"
redirectPort="8443" />
Ответ 9
Добавление ниже к конфигурации (application.yml) у меня работает:
ribbon:
ReadTimeout: 20000
ConnectTimeout: 20000
Время ожидания чтения по запросу
Ответ 10
Для меня ничего из предыдущих работ (возможно, использование приложения с yaml - проблема здесь), но воспользуйтесь этим вопросом:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.MultipartConfigFactory;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.context.annotation.Bean;
import org.springframework.util.unit.DataSize;
import javax.servlet.MultipartConfigElement;
@ServletComponentScan
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
@Bean
MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
factory.setMaxFileSize(DataSize.ofBytes(512000000L));
factory.setMaxRequestSize(DataSize.ofBytes(512000000L));
return factory.createMultipartConfig();
}
}