본문 바로가기
개발자/백엔드 웹 개발자 과정(국비)

[Spring]파일 업로드, 파일 다운로드

by 초응 2023. 3. 3.

[파일 업로드하기]

 

1. 파일 업로드를 하기 위해 라이브러리 다운 받아야함.

받아야할 것  : commons-fileupload , commons-io

현재 maven을 사용하고 있기 때문에

Maven Repository에 들어가서 위의 두 파일을 porm.xml에 추가한다.

 

2. 사용해야할 객체 등록

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="10485760"></property>
</bean>

 - 주의 :  id명을 multipartResolver가 아닌 다른이름으로 할 경우 못찾음.

 - 파일 업로드 가능 용량은 무제한이다 (-1로 설정되어있음) 용량을 변경하기 위해서는 setter인젝션 방법으로 설정할 수 있다. ( 위 property name="maxUploadSize" value는 byte체계로 1024 * 1024* 10 = 10mb로 설정.

 

 

3. MultipartFile 인터페이스

 :  업로드한 파일 정보 및 파일 데이터를 표현하기 위한 용도로 사용.

더보기

주요 메소드

- String / getName() : 파라미터 이름을 구한다.

- String / getOriginalFilename() : 업로드한 파일의 이름을 구한다.

- boolean/ idEmpty() : 업로드 한 파일이 존재하지 않는 경우 true를 리턴한다.

- long/ getSize() : 업로드한 파일의 크기를 구한다.

- byte[]/ getBytes() throws IOException : 업로드한 파일의 데이터를 구한다.

- InputStream/ getInputStream() throws IOException : 업로드 한 파일 데이터를 읽어오는 InputStream을 구한다.사용끝나면 종료해 주어야함.

-void/ transferTo(File dest)throws IOException : 업로드 한 파일 데이터를 지정한 파일에 저장한다.


1. 파일 업로드 방법 (@RequestParam)

 

2. MultipartHttpServletRequest
3. DTO이용
4. 다중 파일 올리기(name동일)

 

 

 


[파일 다운로드 받기 ]

1. 파일 다운로드를 직접 구현하는것이 아닌 구현되어있는 기능 사용. 

(카페)

더보기

com.yong.view 패키지에 DownloadView 클래스 생성.

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.util.FileCopyUtils;
import org.springframework.web.servlet.view.AbstractView;

public class DownloadView extends AbstractView {

	public DownloadView() {
		setContentType("application/download; charset=utf-8");
	}

	@Override
	protected void renderMergedOutputModel(Map<String, Object> model,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		File file = (File) model.get("downloadFile");

		response.setContentType(getContentType());
		response.setContentLength((int) file.length());

		String userAgent = request.getHeader("User-Agent");
		boolean ie = userAgent.indexOf("MSIE") > -1;
		String fileName = null;
		if (ie) {
			fileName = URLEncoder.encode(file.getName(), "utf-8");
		} else {
			fileName = new String(file.getName().getBytes("utf-8"),
					"iso-8859-1");
		}
		response.setHeader("Content-Disposition", "attachment; filename=\""
				+ fileName + "\";");
		response.setHeader("Content-Transfer-Encoding", "binary");
		OutputStream out = response.getOutputStream();
		FileInputStream fis = null;
		try {
			fis = new FileInputStream(file);
			FileCopyUtils.copy(fis, out);
		} finally {
			if (fis != null)
				try {
					fis.close();
				} catch (IOException ex) {
				}
		}
		out.flush();
	}

}

 

 

dispatcher-servlet에 등록해주기


2. 컨트롤러/ jsp 

파일 목록들 가져오기
jsp에서 링크 클릭시 다운로드 링크로 이동

 


3. 실 다운로드

mav.addObject에는 DownloadView.java  아래 부분과 이름을 맞춰줘야하며

DownloadView.java

setViewName에는 dispatcher-servlet에 등록한 id 로 연결해줘야한다. 


 

4. dispatcher-servlet.xml에 등록한 것을 다시 보면 

 viewReslover의 우선순위가 높아 검색이 되지 않는다.

ㄴ 이렇게 우선순위를 변경해줘야 진입이 가능하다.