웹 개발 기초/자바 웹을 다루는 기술

JSP에서 파일 다운로드

sungw00 2023. 3. 2. 18:54
728x90

1. first.jsp 파일 작성

<%-- first.jsp --%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>파일 다운로드 요청하기</title>
</head>
<body>
	<form method="post" action="result.jsp">
    	<%-- 다운로드할 파일 이름을 매개변수로 전달함 --%>
		<input type="hidden" name="param1" value="duke.png" /><br>
		<input type="hidden" name="param2" value="duke2.png" /><br>
		<input type="submit" value="이미지 다운로드">
	</form>
</body>
</html>

2. result.jsp 파일 작성

<%-- result.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" %>
<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>
	<br>
	<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>

 

3. FileDownload.java 클래스 파일 작성

// FileDownload.java
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;

@WebServlet("/download.do")
public class FileDownload 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="/Users/sungwoo/file_repo";
		String fileName = (String)request.getParameter("fileName"); // 매개변수로 전송된 파일 이름을 읽어옴
		System.out.println("fileName="+fileName);
		OutputStream out = response.getOutputStream(); // response에서 OutputStream 객체를 가져옴
		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();
	}

}

 

4. http://localhost:8090/pro15/test02/first.jsp로 요청한 후 이미지 다운로드 클릭

이미지 다운로드 클릭

 

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

파일 내려받기 클릭

 

6. 로컬 PC에 파일이 저장된다.

로컬 PC에 파일 저장

728x90

'웹 개발 기초 > 자바 웹을 다루는 기술' 카테고리의 다른 글

제이쿼리 주요 개념  (0) 2023.03.06
HTML5 주요 개념 및 태그 사용 예제  (0) 2023.03.04
JSP에서 파일 업로드  (0) 2023.03.02
빈 사용 실습  (0) 2023.03.01
pageContext 객체 사용 실습  (0) 2023.03.01