2. 파일 다운로드
1) 우선순위 지정
2) DownloadView.java 기능 사용을 위해 bean으로 등록
3) jsp 페이지에 다운로드용 버튼 하나 만들고 요청경로 지정
4) Controller에서 해당 요청 처리 매핑메서드 만들어 DownloadView의 기능 호출
2-1 우선순위 지정
AppServlet > Servlet-context 에 들어가서 해당 코드 입력하기
<beans:bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
<beans:property name="order" value="0"></beans:property>
</beans:bean>
<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");
ModelAndView mv = new ModelAndView("fileDown", "downloadFile", f);
return mv;
}
}