12 KiB
title, source_type, url, archive_url, related_projects, related_branches, tags, status, confidence, created, last_reviewed
| title | source_type | url | archive_url | related_projects | related_branches | tags | status | confidence | created | last_reviewed | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Spring Boot — Multipart File Uploads (spring.servlet.multipart, MultipartProperties defaults) | official-doc | https://docs.spring.io/spring-boot/how-to/spring-mvc.html |
|
|
raw | high | 2026-05-27 | 2026-05-27 |
Spring Boot — Multipart File Uploads (spring.servlet.multipart, MultipartProperties defaults)
Layer:
raw/official-docs/— Spring Boot Reference / "How-To Guides / Spring MVC / Handling Multipart File Uploads" 페이지 +MultipartProperties.javasource verbatim. File upload endpoint 의MultipartFilebaseline / max-file-size / max-request-size 의 1차 근거.
Parent / 활용 branch (필수)
| Branch | 이 자료가 정당화하는 결정 |
|---|---|
| raw/branch-notes/feature-file-resource-handling-contract | D3 mechanism — Spring Boot 가 default 로 multipart upload 를 enable 하고 max-file-size=1MB / max-request-size=10MB 로 제한한다는 사실. D4 mechanism — spring.servlet.multipart.* property prefix 로 max-file-size override (예: -1 로 unlimited) + MultipartFile controller parameter 사용 패턴 |
컨텍스트
ca-tmpl 의 file/resource handling contract 는 (1) "기본은 작은 파일만 허용 → 1MB default 활용", (2) "큰 파일은 endpoint 별 spring.servlet.multipart.max-file-size override + 별도 storage 경로", (3) "controller 는 @RequestParam MultipartFile" 베이스라인을 따른다. 본 자료는 이 세 결정의 정확한 default 값 + property 명 + controller 형태를 verbatim 으로 보존. 추가로 MultipartProperties.java source 의 정확한 default literal (DataSize.ofMegabytes(1), DataSize.ofMegabytes(10), DataSize.ofBytes(0), enabled=true) 를 함께 보존.
출처 / Source
- 원본 URL (reference, how-to): https://docs.spring.io/spring-boot/how-to/spring-mvc.html (§Handling Multipart File Uploads)
- 보조 URL (source): https://raw.githubusercontent.com/spring-projects/spring-boot/main/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/servlet/MultipartProperties.java
- 아카이브 URL: (미수집)
- 저자 / 조직: Spring Boot (VMware / Broadcom)
- 발행일: rolling docs (current = Spring Boot 3.4+)
- 마지막 확인일: 2026-05-27
핵심 인용 / Key quotes (verbatim)
Reference 문서 (how-to / spring-mvc.html — §Handling Multipart File Uploads)
[§Handling Multipart File Uploads] "Spring Boot embraces the servlet 5
PartAPI to support uploading files."
[§Handling Multipart File Uploads] "By default, Spring Boot configures Spring MVC with a maximum size of 1MB per file and a maximum of 10MB of file data in a single request."
[§Handling Multipart File Uploads] "You may override these values, the location to which intermediate data is stored (for example, to the
/tmpdirectory), and the threshold past which data is flushed to disk by using the properties exposed in theMultipartPropertiesclass."
[§Handling Multipart File Uploads] "For example, if you want to specify that files be unlimited, set the
spring.servlet.multipart.max-file-sizeproperty to-1."
[§Handling Multipart File Uploads] "The multipart support is helpful when you want to receive multipart encoded file data as a
@RequestParam-annotated parameter of typeMultipartFilein a Spring MVC controller handler method."
[§Handling Multipart File Uploads] "It is recommended to use the container's built-in support for multipart uploads rather than introduce an additional dependency such as Apache Commons File Upload."
Source 코드 (MultipartProperties.java)
[MultipartProperties.java — class annotation]
@ConfigurationProperties(prefix = "spring.servlet.multipart", ignoreUnknownFields = false)
[MultipartProperties.java — fields with defaults]
/** Whether to enable support of multipart uploads. */ private boolean enabled = true; /** Intermediate location of uploaded files. */ private String location; /** Max file size. */ private DataSize maxFileSize = DataSize.ofMegabytes(1); /** Max request size. */ private DataSize maxRequestSize = DataSize.ofMegabytes(10); /** Threshold after which files are written to disk. */ private DataSize fileSizeThreshold = DataSize.ofBytes(0); /** Whether to resolve the multipart request lazily at the time of file or parameter access. */ private boolean resolveLazily;
Claims Extracted / 추출된 주장
| Claim ID | Claim (이 자료가 직접 말하는 것) | Evidence quote | Strength | Applies to | Does not prove |
|---|---|---|---|---|---|
| SB-MULTIPART-C1 | Spring Boot 의 multipart 지원은 servlet 5 (Jakarta Servlet 5+) 의 Part API 를 채택 |
[§Handling Multipart File Uploads] "Spring Boot embraces the servlet 5 Part API to support uploading files." |
official-vendor-doc |
Spring Boot (Jakarta Servlet 5+ 환경) | Apache Commons FileUpload 또는 다른 multipart parser 가 fallback 으로 사용되는지는 본 인용 범위 밖 (별도 권고: "container built-in 사용" 명시) |
| SB-MULTIPART-C2 | Spring Boot 는 default 로 per-file max 1MB, per-request max 10MB 의 multipart 제한을 적용 | [§Handling Multipart File Uploads] "By default, Spring Boot configures Spring MVC with a maximum size of 1MB per file and a maximum of 10MB of file data in a single request." + [MultipartProperties.java] private DataSize maxFileSize = DataSize.ofMegabytes(1); + private DataSize maxRequestSize = DataSize.ofMegabytes(10); |
official-vendor-doc |
Spring Boot (current — 3.4+) auto-configuration 미override | reactive (WebFlux) 의 multipart default 가 동일한지는 본 인용 범위 밖 |
| SB-MULTIPART-C3 | multipart 관련 설정은 MultipartProperties 클래스를 통해 노출되며, prefix 는 spring.servlet.multipart 이고, max size / 저장 위치 / disk flush threshold 모두 override 가능 |
[§Handling Multipart File Uploads] "You may override these values, the location to which intermediate data is stored (for example, to the /tmp directory), and the threshold past which data is flushed to disk by using the properties exposed in the MultipartProperties class." + [MultipartProperties.java] @ConfigurationProperties(prefix = "spring.servlet.multipart", ignoreUnknownFields = false) |
official-vendor-doc |
Spring Boot multipart auto-config | reactive (WebFlux) prefix 가 다른지 (실제로는 spring.webflux.multipart) 는 본 인용 범위 밖 |
| SB-MULTIPART-C4 | spring.servlet.multipart.max-file-size=-1 로 설정하면 파일 크기 제한 없음 (unlimited) |
[§Handling Multipart File Uploads] "For example, if you want to specify that files be unlimited, set the spring.servlet.multipart.max-file-size property to -1." |
official-vendor-doc |
Spring Boot multipart property | unlimited 설정이 컨테이너 (Tomcat) 의 별도 제한을 우회한다는 뜻은 본 인용 범위 밖 |
| SB-MULTIPART-C5 | controller 에서 multipart 데이터는 @RequestParam annotation + MultipartFile 타입 parameter 로 받는 것이 권장 패턴 |
[§Handling Multipart File Uploads] "The multipart support is helpful when you want to receive multipart encoded file data as a @RequestParam-annotated parameter of type MultipartFile in a Spring MVC controller handler method." |
official-vendor-doc |
Spring MVC controller handler method | MultipartHttpServletRequest 직접 사용 / @RequestPart 사용은 본 인용 범위 밖 (별도 Spring Framework MVC docs) |
| SB-MULTIPART-C6 | Apache Commons FileUpload 같은 별도 dependency 보다 컨테이너 내장 multipart 지원 사용이 권장됨 | [§Handling Multipart File Uploads] "It is recommended to use the container's built-in support for multipart uploads rather than introduce an additional dependency such as Apache Commons File Upload." | official-vendor-doc |
Spring Boot 환경 (Tomcat/Jetty/Undertow embedded) | "container built-in" 이 servlet 컨테이너 (Tomcat) 의 multipart parser 임을 의미; 컨테이너별 동작 차이는 본 인용 범위 밖 |
| SB-MULTIPART-C7 | MultipartProperties 의 default field 값: enabled = true, maxFileSize = 1MB, maxRequestSize = 10MB, fileSizeThreshold = 0 bytes (즉 항상 disk 로 flush), location = null (servlet container default temp 사용), resolveLazily = false (default) |
[MultipartProperties.java] private boolean enabled = true; + private DataSize maxFileSize = DataSize.ofMegabytes(1); + private DataSize maxRequestSize = DataSize.ofMegabytes(10); + private DataSize fileSizeThreshold = DataSize.ofBytes(0); + private boolean resolveLazily; (Java default = false) |
official-vendor-doc |
Spring Boot (main branch / current) MultipartProperties source | reactive (WebFlux) 의 동일 field 값은 본 인용 범위 밖. fileSizeThreshold = 0 의 정확한 의미 (모든 파일이 즉시 disk 로 가는지, threshold 가 비활성인지) 는 Servlet spec / 컨테이너 별 동작 확인 필요 |
Usage Boundaries / 적용 경계
- 이 자료가 직접 증명하는 것:
SB-MULTIPART-C1: Servlet 5PartAPI 채택SB-MULTIPART-C2: default per-file 1MB / per-request 10MBSB-MULTIPART-C3:MultipartProperties+spring.servlet.multipartprefixSB-MULTIPART-C4:max-file-size=-1= unlimitedSB-MULTIPART-C5:@RequestParam MultipartFile권장 controller 패턴SB-MULTIPART-C6: 컨테이너 내장 multipart 권장SB-MULTIPART-C7:MultipartPropertiessource 의 정확한 default literal 6개
- 이 자료가 증명하지 않는 것:
- WebFlux (
spring.webflux.multipart) 의 default 가 동일하다는 뜻 — 다름 - default 1MB/10MB 가 OWASP / 보안 best practice 라는 뜻 — Spring Boot 의 design 선택일 뿐, 별도 보안 가이드 필요
- Tomcat 의
connectionTimeout/maxSwallowSize등 컨테이너 level limit 이 application property 와 어떻게 상호작용하는지 - 파일 업로드 streaming (chunked transfer) 의 자동 활성화 —
resolveLazily와 streaming 의 관계는 별도 검증 필요 - cleanup (
MultipartFile.transferTo후 임시 파일 삭제 시점) 의 정확한 동작 - virus scan / MIME type 검증 자동 활성화 — Spring Boot 가 제공하지 않음
- WebFlux (
- 내 프로젝트에 적용하려면 추가 확인이 필요한 것:
- ca-tmpl 의
application.yml에서spring.servlet.multipart.max-file-sizeoverride 여부 확인 (default 1MB 가 충분한지) - file upload endpoint 가
@RequestParam("file") MultipartFile file시그니처를 사용하는지 (vs@RequestPart) - 임시 파일 location 설정 (
spring.servlet.multipart.location) 이 컨테이너의/tmp와 충돌하지 않는지 fileSizeThreshold = 0의 실제 동작 (모든 multipart 가 disk 로 가는지 — Tomcat 의 경우0은 "all goes to disk" 의미일 수 있음)
- ca-tmpl 의
메모 / Notes
- 인용 1 해석 후보 (미검증):
fileSizeThreshold = 0literal 의 의미 → Servlet spec 의MultipartConfigElement.fileSizeThresholdJavaDoc 에 따르면 "If not specified, the default of 0 will cause all uploaded files to be written to disk." 일 가능성. 본 raw 의 직접 인용에는 없으므로 별도 확인.
- 추가로 봐야 할 동일 출처 페이지:
- Servlet 5
jakarta.servlet.http.PartJavaDoc https://docs.spring.io/spring-boot/api/java/org/springframework/boot/autoconfigure/web/servlet/MultipartAutoConfiguration.html(auto-config 조건)
- Servlet 5
Related / 관련
- 같은 주제 다른 official-doc:
- raw/official-docs/spring-restclient-builder-reference (outbound multipart 송신 측은 별도)
- 인용하는 branch:
- 인용하는 project:
- 인용하는 wiki: (미작성)