SPRING

SPRING 파일 업로드 다운로드

Adev 2023. 1. 17. 05:08

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