Multipart
웹 클라이언트가 요청을 보낼 때 http프로토콜의 body 부분에 데이터(content type, 파일이름 등)를 여러 part로 나누어 보내는 것이다.
보통 파일 전송 시 사용한다.
HttpServletRequest는 이 multipart데이터를 읽어들이는 메소드를 지원하지 않는다.
body부분을 읽어들이는 InputStream만 지원하기 때문에
stream으로 전달되는 multipart데이터를 처리 하기 위해
라이브러리를 사용한다.
설정 방법
1. [pom.xml]에 라이브러리 추가
1) apache의 commons-fileupload 추가
2) commons-io 추가
2. MultipartResolver Bean 추가 (CommonsMultipartResolver)
"multipart/form-data"가 요청으로 올 경우 DispathcerServlet이 MultipartResolver를 사용한다
Controller
업로드
파일 업로드 폼
<form method="post" action="..." enctype="multipart/form-data">
<input type="file" name="...">
//file 속성의 name과 동일한 이름으로 사용 시 파일들이 배열 형태로 컨트롤러에게 전달된다.
@PostMapping이 사용된다.
파일정보는 MulipartFile 타입으로 파라미터로 전달된다.
@RequestParam("file") MultipartFile file => 파일 하나
@RequestParam("file") MultipartFile[] files=> 파일 여러개
MultipartFile의 메소드를 이용해 파일이름, 용량,
파일을 읽어들이기 위한 InputStream 등을 구해
파일을 서버에 저장하고, 파일 정보는 데이터베이스에 저장한다.
ex)
@PostMapping("/upload")
public String upload(@RequestParam("file" MutipartFile file) {
...
getOriginalFilename()
getSize()
...
FileOutputStream fos = new FileOutPutStream("c:/tmp/" + file.getOriginalFilename());
//파일 저장할 위치 -파일 이름 중복되지 않게 처리하는 것 추천
InputStream is = file.getInputStream(); //파일 업로드할 통로얻어옴
...
}
다운로드
HttpServletResponse의 OutPutStream을 이용해 파일 정보를 출력한다.
헤더에 파일 정보를 설정하고, 캐시를 사용하지 않도록 설정한다.
ex)
...
response.setHeader("Content-Type", contentType);
response.setHeader("Pragma", "no-cache;");
...
@GetMapping("download")
puvlic void download(HttpServletResponse response) {
...
response.setHeader("Content-Type", contentType);
response.setHeader("Pragma", "no-cache;");
...
FileInputStream fis = new FileInPutStream(saveFileName);
OutputStream is = response.getOutStream();
...
}
cf. multipartResolver 업로드 파일 크기
기본값 1048576Byte = 1024(2의10승) x 1024 = 1MB
8bit = 1Byte (....1bit= 2, 2bit= 2*2, 3bit=2*2*2~~~........)
1024Byte = 1KB
1,048,576Byte = 1024KB = 1MB
1,073,741,824Byte = 1,048,576KB = 1024MB = 1GB
'SPRING' 카테고리의 다른 글
SPRING 설정 (JAVA Configuration) (0) | 2023.02.06 |
---|---|
SPRING 설정 (XML) (0) | 2023.02.04 |
SPRING 페이징 처리 (pagination) (0) | 2022.11.30 |
SPRING 로딩 구조, 어노테이션 (0) | 2022.11.25 |
SPRING 기본설정 (XML, JAVA 공통부분) (0) | 2022.11.24 |