본문 바로가기
HTML

48일차//JSP// doGET, HttpServlet ( 자료실 다운로드 받기, 다운로드 수)💨

by aesup 2021. 3. 22.
728x90

pdsdetail.jsp

<%@page import="dto.PdsDto"%>
<%@page import="dao.PdsDao"%>
<%@page import="dto.MemberDto"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%
MemberDto mem = (MemberDto)request.getSession().getAttribute("login");
%>
    <%
String getseq = request.getParameter("seq");
int seq = Integer.parseInt(getseq);

String id = request.getParameter("id");


%>



 
<%
PdsDao dao = PdsDao.getInstance();
dao.readcount(seq);

PdsDto dto = dao.getPds(seq);

%>
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
 <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>

</head>
<body>
<h1>자료실 상세 페이지</h1>
<div class="container">
<table class="table table-hover">
<!-- <col width="200"><col width="400"> -->
<tr>
<td>작성자id</td>
<td><%=dto.getId() %></td>
</tr>

<tr>
<td>제목</td>
<td><input type = "text" value = "<%=dto.getTitle() %>"></td>

</tr>

<tr>
<td>작성일</td>
<td><%=dto.getRegdate()%></td>
</tr>

<tr>
<td>조회수</td>
<td><%=dto.getReadcount() %></td>
</tr>


<tr>
<td>다운로드 수</td>
<td><%=dto.getDowncount() %></td>
</tr>


<tr>
	<td>파일 이름 정보</td>
	<td><%=dto.getFilename()%></td>
</tr>

<tr>
<td>내용</td>
<td><textarea rows="20" cols="50px" ><%=dto.getContent() %></textarea></td>
</tr>



</table>

<br><br>
<%
if(dto.getId().equals(mem.getId())) {
%>
		
<input type="button" name ="btndown" value = "파일다운로드"
				onclick = "location.href='filedown?filename=<%=dto.getFilename()%>&seq=<%=dto.getSeq()%>'">
		
<button onclick = "deletepds(<%=dto.getSeq() %>)">파일 삭제</button>
<button onclick = "update(<%=dto.getSeq() %>)">파일 수정</button>
<%
}
%>

<button onclick = "location.href='pdslist.jsp'">자료실로 가기</button>

</div>

<script type="text/javascript">
function deletepds(seq){
	alert("삭제하겠습니다");
	location.href = "pdsdelete.jsp?seq="  +seq + "&filename=" + <%=dto.getFilename() %> + "";
}

</script>


</body>
</html>

FileDownLoader.java

package filedown;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import dao.PdsDao;
import dto.PdsDto;

public class FileDownLoader extends HttpServlet{
	
	ServletConfig mConfig = null;
	final int BUFFER_SIZE = 8192;
	
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
		//여기가 컨트롤러라고 생각하자
		//파일 버튼을 누르면 실행
		System.out.println("FileDownLoader");
		String filename = req.getParameter("filename");
		int seq = Integer.parseInt(req.getParameter("seq"));
		
		
		//DOWNCOUNT 증가
		PdsDao dao = PdsDao.getInstance();
		dao.downcount(seq);
		
		
		PdsDto dto = dao.getPds(seq);
		System.out.println(dto.toString());
		
		
		
		BufferedOutputStream out = new BufferedOutputStream(resp.getOutputStream());
	
		//경로(path)
		//tomcat - server
		String filepath = mConfig.getServletContext().getRealPath("/upload");
		
		//폴더 client
		//String filepath = "d:\\tmp";
		//톰캣과 무관 확인용
		filepath = filepath + "\\" + filename;
		System.out.println("filepath:" + filepath);
		
		File f = new File(filepath);
		
		if(f.exists() && f.canRead()) {
			//파일이 존재하는지 알기위한 조건문
			 
			//다운받을시 윈도우 하단에 다운로드 창 실행
			 resp.setHeader("Content-Disposition", "attachment; filename=\"" + filename + "\";");
	         resp.setHeader("Content-Transfer-Encoding", "binary;");
	         resp.setHeader("Content-Length", "" + f.length());
	         resp.setHeader("Pragma", "no-cache;"); 
	         resp.setHeader("Expires", "-1;");
	         
	         //파일 생성, 기입
	         BufferedInputStream fileInput = new BufferedInputStream(new FileInputStream(f)); 
		
	        		 byte buffer[] = new byte[BUFFER_SIZE];
	         		 int read = 0;
	         		 
	         		 while((read = fileInput.read(buffer)) != -1) {
	         			 out.write(buffer,0,read);//실제 다운로드
	         		 }
		
	         		 fileInput.close();
	         		 out.flush();
	         		 
	         		 //1-> 같은 파일명 -> 원본명을 시간 명으로 변경
	         		 
	         		
		
		}
		
		
		
	}

	@Override
	public void init(ServletConfig config) throws ServletException {
		mConfig = config; //업로드한 경로 취득
	}
	
}
728x90