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에 파일이 저장된다.
728x90
'웹 개발 기초 > 자바 웹을 다루는 기술' 카테고리의 다른 글
제이쿼리 주요 개념 (0) | 2023.03.06 |
---|---|
HTML5 주요 개념 및 태그 사용 예제 (0) | 2023.03.04 |
JSP에서 파일 업로드 (0) | 2023.03.02 |
빈 사용 실습 (0) | 2023.03.01 |
pageContext 객체 사용 실습 (0) | 2023.03.01 |