2. 파일 다운로드


1) 우선순위 지정
2) DownloadView.java 기능 사용을 위해 bean으로 등록
3) jsp 페이지에 다운로드용 버튼 하나 만들고 요청경로 지정
4) Controller에서 해당 요청 처리 매핑메서드 만들어 DownloadView의 기능 호출

 

2-1 우선순위 지정

AppServlet > Servlet-context 에 들어가서 해당 코드 입력하기

 

	<!--  InternalResourceViewResolver 보다 우선순위를 높게해서 먼저 다운로드에 관하는
    				beannameViewResolve 실행되게끔 -->
	<beans:bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
		<beans:property name="order" value="0"></beans:property>
	</beans:bean>

	<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
	<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<beans:property name="prefix" value="/WEB-INF/views/" />
		<beans:property name="suffix" value=".jsp" />
		<beans:property name="order" value="1"></beans:property>
	</beans:bean>

 

 

2-2 Downloadview 기능을 위한 bean등록

 

 

AppServlet > root-context 에 들어가서 해당 코드 입력

<bean id="fileDown" class="com.upload.util.DownloadView" />

 

src/main/java > com.upload.util 패키지 생성후

해당 java 클래스 만들기

 

package com.upload.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.OutputStream;
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 fileName = java.net.URLEncoder.encode(file.getName(), "UTF-8"); 
		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);			
		}catch (Exception e) {
			e.printStackTrace();
		}finally {
			if(fis != null) { try {fis.close();}catch(Exception e2) { e2.printStackTrace(); } }
			out.flush();
		}
	}
}

 

 

2-3 jps 페이지에 다운로드용 버튼 만들고 요청경로 지정

 

helloDown.jsp

window.location='/upload/download  요청경로지정

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>Insert title here</title>
</head>
<body>
	<h2> hello down page</h2>
	<h3> 다운을 받고 싶으면 아래 버튼을 누르세요 !!!</h3>
	<button onclick="window.location='/upload/download'"> 다운로드  </button>
</body>
</html>

 

 

 

 

2-4  Controller에서 해당 요청 처리 매핑메서드 만들어 DownloadView의 기능 호출

 

	// 다운로드 버튼 띄운 화면	
	@GetMapping("helloDown")
	public void helloDown() {
		
	}

	// 다운 요청 처리
	@GetMapping("download")
	public ModelAndView down() {
		// 다운 시킬 파일 준비
		File f = new File("C:\\img\\ham.jpg");
		// 생성자 매개변수
		// String viewName 		:	view 이름 -> xml 지정한 downloadView 빈의 id값
		// String modelName		:	파라미터명 지정 (이름) 
		// Object modelObject	:	데이터 (다운 시킬 파일)
		ModelAndView mv = new ModelAndView("fileDown", "downloadFile", f);  //root에 bean으로 fileDown 만듦 그 다음 dowloadFile 키와 f라는 value를 줌 
		return mv;
	}
}

'WEB Creator > [Spring]' 카테고리의 다른 글

[Spring] Filter와 Interceptor의 차이점  (0) 2022.09.08
[Spring] @Controller와 @RestController  (0) 2022.08.31
[Spring] File Upload  (0) 2022.08.25

+ Recent posts