728x90
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;
}
}
728x90
'WEB Creator > [Spring]' 카테고리의 다른 글
[Spring] Filter와 Interceptor의 차이점 (0) | 2022.09.08 |
---|---|
[Spring] @Controller와 @RestController (0) | 2022.08.31 |
[Spring] File Upload (0) | 2022.08.25 |