프로그래밍 언어/자바 웹

JSP에서 파일 다운로드

· 코딩마이데이

1. 다음과 같이 sec01.ex02 패키지를 만들고 FileDownload 서블릿을 생성합니다. 이어서 test02 폴더를 만들고 실습 파일 first.jsp와 result.jsp를 추가합니다.

실습 파일 위치

 

 

2. 첫 번째 JSP에서 다운로드할 이미지 파일 이름을 두 번째 JSP로 전달하도록 first.jsp를 작성합니다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"
    isELIgnored="false"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"  %>       

<%
  request.setCharacterEncoding("utf-8");
%>
<html>
<head>
<meta charset="UTF-8">
<title>파일 다운로드 요청하기</title>
</head>
<body>
 
 <form method="post"  action="result.jsp" >
	 <input type=hidden  name="param1" value="cartoon-lifestyle-summertime-scene.jpg" /> <br>
	 <input type=hidden  name="param2" value="flowers-plants-copy-space-background.jpg" /> <br>
   <input type ="submit" value="이미지 다운로드">	 
 </form> 
</body>
</html>

 

3. 두 번째 JSP인 result.jsp를 다음과 같이 작성합니다. 이미지 파일 표시창에서 <img> 태그의 src 속성에 다운로드를 요청할 서블릿 이름 download.do와 파일 이름을 GET 방식으로 전달합니다. 다운로드한 이미지 파일을 바로 <img> 태그에 표시하고, <a> 태그를 클릭해 서블릿에 다운로드를 요청하면 파일 전체를 로컬 PC에 다운로드합니다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"
    isELIgnored="false"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"  %>       
<c:set var="contextPath"  value="${pageContext.request.contextPath}"  />
<%
	request.setCharacterEncoding("utf-8");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<c:set var="file1" value="${param.param1}"/>
<c:set var="file2" value="${param.param2}"/>

<title>이미지 파일 출력하기</title>
</head>
<body>
	매개변수 1:
	<c:out value="${file1}" /><br>
	매개변수 2:
	<c:out value="${file2}" /><br>
	
	<c:if test="${not empty file1}">
		<img src="${contextPath}/download.do?fileName=${file1}" width=300 height=300 /><br>
	</c:if>
	<c:if test="${not empty file2}">
		<img src="${contextPath}/download.do?fileName=${file2}" width=300 height=300 /><br>
	</c:if>
	파일 내려받기 :<br>
	<a href="${contextPath}/download.do?fileName=${file2}" />
	파일 내려받기 </a><br>
</body>
</html>

 

4. 파일 다운로드 기능을 할 서블릿인 FileDownload 클래스를 다음과 같이 작성합니다. 파일 다운로드 기능은 자바 IO를 구현합니다. 먼저 response.getOutputStream();를 호출해 OutputStream을 가져옵니다. 그리고 배열로 버퍼를 만든 후 while 반복문을 이용해 파일에서 데이터를 한 번에 8KB씩 버퍼에 읽어옵니다. 이어서 OutputStream의 write() 메서드를 이용해 다시 브라우저로 출력합니다.

package sec01.ex02;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class FikeDownload
 */
@WebServlet("/download.do")
public class FikeDownload extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doHandle(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doHandle(request, response);
	}
	
	private void doHandle(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=utf-8");
		String file_repo="C:\\file_repo";
		String fileName = (String)request.getParameter("fileName");
		System.out.println("fileName=" + fileName);
		OutputStream out = response.getOutputStream();
		String downFile = file_repo + "\\" + fileName;
		File f = new File(downFile);
		response.setHeader("Cache-Control", "no-cache");
		response.addHeader("Content-disposition", "attachment; fileName=" + fileName);
		FileInputStream in = new FileInputStream(f);
		byte[] buffer = new byte[1024*8];
		while(true) {
			int count = in.read(buffer);
			if (count == -1) {
				break;
			}
			out.write(buffer, 0, count);
		}
		in.close();
		out.close();
	}
}

 

5. http://localhost:8080/pro15/test02/first.jsp로 요청한 후 이미지 다운로드를 클릭합니다.

이미지 다운로드 클릭

 

6. 업로드한 이미지가 브라우저에 출력되면 파일 내려받기를 클릭해 로컬 PC에 파일을 저장합니다.

화면에 이미지가 출력되면 파일 내보내기 클릭

 

로컬 PC에 파일 저장

'프로그래밍 언어 > 자바 웹' 카테고리의 다른 글

HTML5에 추가된 웹 페이지 구조 관련 태그  (0) 2026.04.25
HTML5 주요 개념  (0) 2026.04.22
JSP 페이지에서 파일 업로드  (0) 2026.04.16
파일 업로드 관련 API  (0) 2026.04.13
JSP에서 파일 업로드  (1) 2026.04.11