관리 메뉴

me made it !

[JSP] 20230322 JSP 파일 첨부된 게시 글 구현하기 본문

TIL/JSP

[JSP] 20230322 JSP 파일 첨부된 게시 글 구현하기

yeoney 2023. 3. 22. 16:50
반응형
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
 <%@page import="example1230.domain.BoardVo" %>
  
  <%  BoardVo bv =(BoardVo)request.getAttribute("bv"); %>
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>글 내용보기</title>
</head>
<body>
내용보기
<table  border=1 style="width:500px;">
<tr>
<td style="width:50px;">제목</td>
<td><%=bv.getSubject() %></td>
<td>  조회수(<%=bv.getViewcnt() %>)</td>
</tr>
<tr>
<td>파일다운로드</td>
<td>
<% 
if(bv.getFilename() == null){
}else{%>
<a href="<%=request.getContextPath()%>/board/fileDownload.do?filename=<%=bv.getFilename()%>"><%=bv.getFilename() %></a></td>
<%} %>
</tr>

<tr>
<td>이미지</td>
<td>
<%
if(bv.getFilename() == null){
}else{
	String exp = bv.getFilename().substring(bv.getFilename().length()-3, bv.getFilename().length());
		
		if (exp.equals("jpg") || exp.equals("gif") || exp.equals("png")|| exp.equals("peg")) { %>
		<img src="<%=request.getContextPath()%>/image/<%=bv.getFilename()%>" width="100%" height="100%" ></td>
		<%}
		}
%>
</tr>

<tr>
<td style="height:200px;">내용</td>
<td><%=bv.getContent() %></td>
<td></td>
</tr>
<tr>
<td>작성자</td>
<td><%=bv.getWriter() %></td>
<td></td>
</tr>
<tr>
<td colspan=2 style="text-align:right;">

<button onclick = "location.href='<%=request.getContextPath()%>/board/boardModify.do?bidx=<%=bv.getBidx() %>'">수정</button>
<button onclick = "location.href='<%=request.getContextPath()%>/board/boardDelete.do?bidx=<%=bv.getBidx() %>'">삭제</button>
<button onclick = "location.href='<%=request.getContextPath()%>/board/boardReply.do?bidx=<%=bv.getBidx() %>&originbidx=<%=bv.getOriginbidx()%>&depth=<%=bv.getDepth()%>&level_=<%=bv.getLevel_()%>'">답변</button>
<button onclick = "location.href='<%=request.getContextPath()%>/board/boardList.do'">목록</button>
</td>
</tr>
</table>
</body>
</html>
else if  (str.equals("/board/fileDownload.do")) {
			
			String filename = request.getParameter("filename");
			String filePath ="D:\\dev1230\\Example1230\\src\\main\\webapp\\image";
			// 전체경로
			String fullFilePath = filePath +"\\"+ filename;
			// 실제 물리적인 경로로 인식시키기 위해
			Path source =Paths.get(fullFilePath);
			// 파일 형식 추출
			String mimeType = Files.probeContentType(source);
			// 헤더에 파일 형식을 담아서 가지고 간다
			response.setContentType(mimeType);
			// 한글 깨짐 방지
			String filenameEncoding = new String(filename.getBytes("UTF-8"));
			// 인코딩한 파일이름을 첨부해서 헤더에 담아서 가져간다.
			response.setHeader("Content-Disposition", "attachment; fileName="+filenameEncoding);
			
			FileInputStream fileInputStream = new FileInputStream(fullFilePath);
			
			ServletOutputStream so = response.getOutputStream();
			
			int read = 0;
			byte[] b = new byte[4096];
			while( (read = fileInputStream.read(b, 0, b.length))!=-1 ) {
				so.write(b, 0, read);				
			}
			so.flush();
			so.close();
			fileInputStream.close();
		}

링크를 누르면 다운로드가 가능하도록 만들었다!

이미지가 첨부되지 않은 페이지에 오류가 발생한다면 ? 

<%
if(bv.getFilename() == null){
}else{
	String exp = bv.getFilename().substring(bv.getFilename().length()-3, bv.getFilename().length());
		
		if (exp.equals("jpg") || exp.equals("gif") || exp.equals("png")|| exp.equals("peg")) { %>
		<img src="<%=request.getContextPath()%>/image/<%=bv.getFilename()%>" width="100%" height="100%" ></td>
		<%}
		}
%>

if 구문을 추가해서 파일이 첨부되지 않아도 contents가 보이도록 하기

 

반응형