업로드 파일의 최대 크기를 설정하는 방법
Spring Boot과 Angular를 기반으로 어플리케이션을 개발하고 있습니다.JS는 JHipster를 사용합니다.궁금한 것은 업로드 파일의 최대 크기를 어떻게 설정하느냐는 것입니다.
큰 파일에 업로드하려고 하면 콘솔에 다음 정보가 표시됩니다.
DEBUG 11768 --- [io-8080-exec-10] c.a.app.aop.logging.LoggingAspect:
Enter: com.anuglarspring.app.web.rest.errors.ExceptionTranslator.processRuntimeException() with argument[s] =
[org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request; nested exception is java.lang.IllegalStateException:
org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededException: The field file exceeds its maximum permitted size of 1048576 bytes.]
서버 응답(상태 500)
어떻게 설정하죠?
또한 Spring boot 1.4에서는 application.properties에 다음 행을 추가하여 파일 크기 제한을 설정할 수 있습니다.
spring.http.multipart.max-file-size=128KB
spring.http.multipart.max-request-size=128KB
스프링 부트 2.x 이상용
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB
나한테는 통했어출처 : https://spring.io/guides/gs/uploading-files/
갱신:
어떤 사람이 두 성질의 차이점을 물었다.
정식 정의는 다음과 같습니다.
최대 파일 크기:업로드된 파일에 허용되는 최대 크기(바이트).업로드된 파일의 크기가 이 크기보다 클 경우 웹 컨테이너는 예외(IllegalStateException)를 슬로우합니다.기본 크기는 무제한입니다.
최대 요구 크기:멀티파트/폼 데이터 요청에 허용되는 최대 크기(바이트).업로드된 모든 파일의 전체 크기가 이 임계값을 초과하면 웹 컨테이너에서 예외가 발생합니다.기본 크기는 무제한입니다.
각각의 설명:
최대 파일 크기:단일 파일을 업로드할 수 있는 제한입니다.이는 단일 파일 제한에만 적용됩니다.
최대 요구 크기:단일 업로드 요청 내 모든 파일의 총 크기 제한입니다.그러면 총 제한이 확인됩니다.하나의 업로드 요청에 대해 a.txt와 b.txt 두 개의 파일이 있다고 가정합니다. a.txt는 5kb이고 b.txt는 7kb이므로,MaxRequestSize
12kb보다 커야 합니다.
에서는 '''2'''spring.http.multipart
로 changed to 로 변경되다spring.servlet.multipart
2의 경우 Spring Boot 2를 사용하고 합니다.+외부 링크,spring.servlet
spring.http
.
---
spring:
servlet:
multipart:
max-file-size: 10MB
max-request-size: 10MB
Tomcat을 사용해야 하는 경우 Embedded Servlet Container Customizer가 생성될 수 있습니다.이것은 그다지 바람직하지 않습니다.
Tomat 없이 사용할 수 있는 경우 Tomcat을 undertow와 같이 대체하여 이 문제를 전혀 방지할 수 있습니다.
요.multipart.maxFileSize
★★★★★★★★★★★★★★★★★」multipart.maxRequestSize
파라미터를 기본값보다 높은 값으로 설정합니다.이것은 스프링 부트 설정 yml 파일로 실행할 수 있습니다.를 들어, '다보다'에 '에'를 식입니다.application.yml
는 사용자가 파일을 할 수 : 10Mb 파일을 업로드 할 수 있습니다.
multipart:
maxFileSize: 10Mb
maxRequestSize: 10Mb
을 업로드 할 수 할 수 10MB를 해야 .multipart.maxRequestSize
"Display" : "Display" : "Display" :
multipart:
maxFileSize: 10Mb
maxRequestSize: 100Mb
출처 : https://spring.io/guides/gs/uploading-files/
application.properties와 application yaml에서 속성을 정의할 때는 약간의 차이가 있습니다.
application.yml:
spring:
http:
multipart:
max-file-size: 256KB
max-request-size: 256KB
application.proprieties에서는 다음과 같습니다.
spring.http.multipart.max-file-size=128KB
spring.http.multipart.max-request-size=128KB
메모: Spring 버전 4.3 및 Spring 부트 1.4
»spring 2.x
약간 되었습니다. 이치노그래서 위의 답변들은 거의 맞지만 완전히 맞는 것은 아니다.고객님의 고객명application.properties
합니다.
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB
엑스퍼트 익스체인지에서 솔루션을 찾았고, 그것은 나에게 잘 작동했습니다.
@Bean
public MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
factory.setMaxFileSize("124MB");
factory.setMaxRequestSize("124MB");
return factory.createMultipartConfig();
}
참고 자료: https://www.experts-exchange.com/questions/28990849/How-to-increase-Spring-boot-Tomcat-max-file-upload-size.html
spring boot application.properties의 이러한 속성은 허용 가능한 파일 크기를 제한하지 않습니다.
# To prevent maximum upload size limit exception
spring.servlet.multipart.max-file-size=-1
spring.servlet.multipart.max-request-size=-1
더 으로 말하면, 의 「 」에서,application.yml
「 」 、 「 」 、 「 」:」섹션에 추가합니다.
http:
multipart:
max-file-size: 512MB
max-request-size: 512MB
공백은 중요하므로 탭을 들여쓰기에 사용할 수 없습니다.
하고 spring-boot-1.3.5.RELEASE
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★위의 어떤 해결책도 나에게는 효과가 없다.으로 다음 을 더합니다.application.properties
문제가 해결되었습니다.
multipart.max-file-size=10MB
게임 진행이 매우 늦은 것은 알지만, 향후 같은 문제에 직면하는 사람이 있다면 mysql을 사용할 때 직면했던 추가 문제를 게시하고 싶었습니다.
위의 답변 중 몇 가지와 같이 application.properties에서 설정하시면 문제가 대부분 해결됩니다.
spring.http.multipart.max-file-size=16MB
spring.http.multipart.max-request-size=16MB
mysql MEDIUMBLOB 데이터형을 사용하여 파일을 저장하기 때문에 16MB로 설정합니다.
그러나 application.properties를 수정한 후 파일을 업로드 할 때 > 4MB가 되면 org.springframework.dao 오류가 발생하였습니다.TransientDataAccessResourceException: PreparedStatementCallback; SQL [test_doc(doc_id, duration_of_doc, doc_version_id, file_name, doc) 값(?, ?, ?, ?, ?); 쿼리용 패킷이 너무 큽니다(6656781 > 4194304).max_allowed_packet' 변수를 설정하여 서버에서 이 값을 변경할 수 있습니다.; nested 예외는 com.disc.jdbc입니다.PacketTooBigException:쿼리용 패킷이 너무 큽니다(6656781 > 4194304).max_allowed_packet' 변수를 설정하여 서버에서 이 값을 변경할 수 있습니다.
그래서 mysql에서 다음 명령을 실행했습니다.
SET GLOBAL max_allowed_packet = 1024*1024*16;
"connection resets"(연결 리셋) 오류가 표시되는 경우 Tomcat 7.0.55(ChangeLog)에서 추가된 Tomcat 기본 커넥터 maxSwallowSize 속성에 문제가 있을 수 있습니다.
Apache Tomcat 8 구성 참조에서
maxSwallow사이즈:업로드 중단으로 Tomcat에 의해 삼켜지는 요청 본문의 최대 바이트 수(전송 부호화 오버헤드 제외).업로드가 중단되는 것은 Tomcat이 요청 본문이 무시될 것을 알고 있지만 클라이언트가 계속 요청을 보내는 경우입니다.Tomcat이 본문을 삼키지 않으면 클라이언트는 응답을 볼 수 없습니다.지정하지 않으면 기본 2097152(2MB)가 사용됩니다.값이 0보다 작으면 제한이 적용되지 않음을 나타냅니다.
Springboot 내장 Tomcat의 경우 Tomcat Embedded Servlet Container Factory를 선언합니다.
Java 8:
@Bean
public TomcatEmbeddedServletContainerFactory tomcatEmbedded() {
TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();
tomcat.addConnectorCustomizers((TomcatConnectorCustomizer) connector -> {
if ((connector.getProtocolHandler() instanceof AbstractHttp11Protocol<?>)) {
//-1 for unlimited
((AbstractHttp11Protocol<?>) connector.getProtocolHandler()).setMaxSwallowSize(-1);
}
});
return tomcat;
}
Java 7:
@Bean
public TomcatEmbeddedServletContainerFactory tomcatEmbedded() {
TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();
tomcat.addConnectorCustomizers(new TomcatConnectorCustomizer() {
@Override
public void customize(Connector connector) {
if ((connector.getProtocolHandler() instanceof AbstractHttp11Protocol<?>)) {
//-1 for unlimited
((AbstractHttp11Protocol<?>) connector.getProtocolHandler()).setMaxSwallowSize(-1);
}
}
});
return tomcat;
}
또는 5MB의 Tomcat/conf/server.xml에서
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxSwallowSize="5242880" />
Askerali Maruthullathil의 답변과 일치하여 다음과 같은 것이 효과적입니다(스프링 5.2.2가 적용된 스프링 부트).
@Configuration
public class MultipartRequestFileConfig {
@Bean(name = "multipartResolver")
public CommonsMultipartResolver multipartResolver() {
CommonsMultipartResolver resolver = new CommonsMultipartResolver();
resolver.setDefaultEncoding("UTF-8");
resolver.setResolveLazily(true);
resolver.setMaxInMemorySize(83886080);
resolver.setMaxUploadSize(83886080);
return resolver;
}
}
spring-boot 2.5.2에서 이 설정을 사용했는데 정상적으로 동작합니다.
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB
공식 매뉴얼을 참조하십시오.https://spring.io/guides/gs/uploading-files/
이 예외를 피하기 위해 Spring 1.5.8에서 사용한 것처럼 VM 인수를 사용할 수 있습니다.릴리즈:
-Dspring.http.multipart.maxFileSize=70Mb
-Dspring.http.multipart.maxRequestSize=70Mb
스프링 어플리케이션에서는 위의 설정 중 어느 것도 동작하지 않았습니다.
이 코드를 메인 어플리케이션클래스(@SpringBootApplication 주석 첨부)에 실장하면 효과가 있었습니다.
@Bean
EmbeddedServletContainerCustomizer containerCustomizer() throws Exception {
return (ConfigurableEmbeddedServletContainer container) -> {
if (container instanceof TomcatEmbeddedServletContainerFactory) {
TomcatEmbeddedServletContainerFactory tomcat = (TomcatEmbeddedServletContainerFactory) container;
tomcat.addConnectorCustomizers(
(connector) -> {
connector.setMaxPostSize(10000000);//10MB
}
);
}
};
}
스테이트먼트에서 허용되는 크기를 변경할 수 있습니다.
커넥터setMaxPostSize(100000);/10MB
전작(아마도 여기서 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();
}
}
Netflix Zuul 엣지 서비스를 통해 플로우를 요청할 경우 Zuul과 파일 업로드 서비스 모두에서 아래 속성을 업데이트하십시오.
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB
Tomcat 최대 크기 설정
server:
tomcat:
# unlimited
max-swallow-size: -1
max-http-form-post-size: -1
이것을 당신의 것에 넣으세요.application.yml
최대 900MB의 파일 업로드 허용 파일
server:
servlet:
multipart:
enabled: true
max-file-size: 900000000 #900M
max-request-size: 900000000
언급URL : https://stackoverflow.com/questions/37540028/how-to-set-the-max-size-of-upload-file
'programing' 카테고리의 다른 글
Dropzone - 검출되지 않은 오류:URL이 제공되지 않았습니다. (0) | 2023.03.19 |
---|---|
중첩된 배열 내에서 일치하는 하위 문서 요소만 반환합니다. (0) | 2023.03.19 |
레일 3의 JS/ERB 템플릿에서 JSON 처리 (0) | 2023.03.19 |
Angular를 사용하여 객체를 배열에 푸시하는 방법JS (0) | 2023.03.19 |
Spring Boot REST API - 요청 시간 초과? (0) | 2023.03.19 |