-
Servlet-JSP MVC07 - 파일 다운로드Web/Servlet-JSP 2023. 7. 23. 00:20
> 업로드된 파일을 다시 다운로드 받아보자.
1. MemberContent.jsp설정
<a href="javascript:getFile('${vo.filename}')"><c:out value="${vo.filename}"/></a>
파일 이름 출력하는 부분에 a태그를 걸었다.
function getFile(filename){ location.href="<c:url value='/fileGet.do'/>?filename="+filename; }
파일 다운로드를 처리할 수 있는 컨트롤러로 가도록 설정
2. Controller
public class FileGetController implements Controller{ @Override public String requestHandler(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //파일 읽어올 경로 설정 String filename = request.getParameter("filename"); String UPLOAD_DIR ="file_REPO"; String UPLOAD_REAL_PATH = request.getServletContext().getRealPath("")+File.separator+UPLOAD_DIR; //File 객체 만들기 File f = new File(UPLOAD_REAL_PATH+File.separator+filename); filename = URLEncoder.encode(filename,"UTF-8"); //클라이언트로부터 넘어오는 파일 이름 한글이 있을때 안깨지게하기 위함 filename = filename.replace("+", " "); //크롬같은 경우 업로드된 파일에 공백을 +로 연결하는 경우가 있음 제거(별건아님) //다운로드 준비 -> 서버에서 클라이언트에게 다운로드 준비 시키는 부분 (파일 내려보낼꺼야 알려주는 부분) response.setContentLength((int)f.length()); //클라이언트가 다운로드 대비하도록 내보내는 파일 크기 알림 //응답헤더에 설정 response.setContentType("application/x-msdownload;charset=utf-8"); //컨텐츠타입설정, 다운로드시 한글데이터 안깨지도록 설정 //jsp는 이미 설정되어 있지만, 이건 view로 보낼게 아니자너 response.setHeader("Content-Disposition", "attachment;filename="+filename+";"); //다운로드시 다운받고 있는거 브라우저 통해서 볼 수 있도록 설정 response.setHeader("Content-Transfer-Encoding", "binary"); //파일을 바이너리데이터로 바꾸어서 응답하겠다고 설정 response.setHeader("Pragma", "no-cache"); response.setHeader("Expires", "0"); //여기까지 기본적인 설정 //실제 다운로드 FileInputStream in = new FileInputStream(f); //실제 파일 읽은 스트림 OutputStream out = response.getOutputStream(); byte[] buffer = new byte[1024]; //버퍼용 while(true) { int count = in.read(buffer);//버퍼에 담아서 if(count == -1) break; out.write(buffer,0,count);//내려보내기 } in.close(); out.close(); return null; } }
1. 파라미터로 넘어온 파일이름 받아서, 파일 저장된 경로 찾기
2. 파일 절대경로와 파일명을 통해 파일 객체를 만들자 (이것을 다운받음)
3. 다운로드 준비로 response를 통해 설정을 해둔다.
4. 스트림을 이용해 파일을 내려보낸다. *버퍼 사용 잊지말기
참고자료: 나프2탄 (박매일)- 인프런
https://www.inflearn.com/course/%EB%82%98%ED%94%84-mvc-2/dashboard
'Web > Servlet-JSP' 카테고리의 다른 글
Servlet-JSP MVC07 - 파일 삭제 하기 (0) 2023.07.24 Servlet-JSP MVC07 - 리스트에 이미지 띄우고, 상세페이지에서 파일보기 (0) 2023.07.22 Servlet-JSP MVC07(3) - Ajax 파일업로드 (0) 2023.06.27 Servlet-JSP MVC07 (2) - ajax로 JSON 다루기 (0) 2023.06.26 Servlet-JSP MVC07 (1) - Ajax를 활용한 id 중복확인 (0) 2023.06.25