[jsp] a 태그를 이용한 다운로드 기능
안녕하세요.
jsp 단에서 a링크를 이용하여 파일을 다운로드를 해 보겠습니다.
사실 제일 간단한 방법은 서버에 있는 경로를 바로 넣어주시면 됩니다.
<a href="<c:url value="/wcom/manual/Kiss_manual.zip"/>" >테스트파일</a>
이렇게 해주시면됩니다.
경로는 webapp 하위로 잡아주시면 됩니다.
또한가지의 방법은
<a href="<c:url value="/fileDown.do?fileDir=/wcom/manual&fileName=test.jpg"/>">테스트 파일</a>
다른 jsp 를 호출한 방법입니다.
/fileDown.do? <<< 이부분으로 컨트롤러를 통해 jsp 화면으로 갑니다.
jsp 에서 호출한 컨트롤러 입니다.
/** 파일 다운로드 jsp 모듈 */ @RequestMapping("/fileDown.do") public String fileDown(HttpServletRequest req , ModelMap modelMap) throws Exception { String fileName = req.getParameter("fileName"); String fileDir = req.getParameter("fileDir"); modelMap.put("fileName", fileName); modelMap.put("fileDir", fileDir); return "/comm/filedown/filedown"; }
사실 별다른 모듈은 없습니다.
이제 중요한 jsp 소스 입니다.
<%@page import="kiss.KissCodeConstants"%> <%@page import="kiss.KissConstants"%> <%@ page import="java.io.File" %> <%@ page import="java.io.*"%> <%@ page import="java.net.URLEncoder"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>파일다운로드 <% String fileName = request.getParameter("fileName"); String fileDir = request.getParameter("fileDir"); //파일명 인코딩 String UTF8FileName = new String(fileName.getBytes("8859_1"), "UTF-8"); //실제 파일 String filePath = KissConstants.getServerUrl()+ "/src/main/webapp" + fileDir + "/" + fileName; boolean MSIE = request.getHeader("user-agent").indexOf("MSIE") != -1; if(MSIE){ // 브라우저가 IE일 경우 저장될 파일 이름 // 공백이 '+'로 인코딩된것을 다시 공백으로 바꿔준다. fileName = URLEncoder.encode(UTF8FileName, "UTF8").replaceAll("\\+", " "); }else{ // 브라우저가 IE가 아닐 경우 저장될 파일 이름 fileName = new String(UTF8FileName.getBytes("UTF-8"), "8859_1"); } try{ out.clear(); out = pageContext.pushBody(); File file = new File(filePath); byte b[] = new byte[1024]; response.reset(); //response.setContentType("application/octet-stream"); response.setHeader("Content-Type", "application/octet-stream;"); response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\";"); FileInputStream fis = new FileInputStream(filePath); BufferedInputStream bis = new BufferedInputStream(fis); BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream()); int numRead; while((numRead = bis.read(b,0,b.length)) != -1){ bos.write(b,0,numRead); } bos.flush(); bos.close(); bis.close(); }catch(Exception e){ e.printStackTrace(); } %>
자바단에서 이루어지는 로직을 jsp로 옮겨두는것 뿐입니다.
서버에 있는 파일을
FileInputStream으로 읽어 BufferdOutputStream으로 쏴주는 로직입니다.
이렇게 적어두고 나중에 바로바로 써먹어야겠습니다.
나중에 찾으려면 이것저것 바꿔보고 은근 시간 소비될때가 있거든요..
그럼 ~ 감사합니다!
'개발 > web, html5,jsp' 카테고리의 다른 글
서블릿과 JSP 의 기초 개념 (0) | 2018.10.21 |
---|---|
[기초 잊지말자]테이블 border 두줄, 두겹 나오는 현상 (0) | 2018.02.05 |
웹취약성 크로스사이트 스크립트(XSS) 처리하기 (0) | 2017.09.07 |
[html5]웹 fieldset, legend, input 태그 속성 (placeholder 등) (0) | 2016.04.15 |
html tag 정리 mark, progress, meter, details (0) | 2016.04.12 |
서블릿 동작 원리 이해 및 공부, 서블릿의 라이프 사이클 (0) | 2016.04.06 |
쿠키와 세션 설명 및 이해 (0) | 2016.04.04 |