목차 | |
1. | File |
1. File
첨부파일 라이브러리 추가
commons-fileupload-1.4.jar
commons-io-2.11.0.jar
thumbnailator-0.4.17.jar
▣ sqlFile.sql
create table board(
bno int auto_increment,
title varchar(500) not null,
writer varchar(100) not null,
content text,
regdate datetime default now(),
moddate datetime default now(),
primary key(bno));
-- 2024.10.23
-- 댓글(comment)
create table comment(
cno int auto_increment,
bno int not null,
content varchar(2000) not null,
writer varchar(500) default "unknown",
regdate datetime default now(),
primary key(cno));
-- 10.24
-- 조회수
alter table board add column readCount int default 0;
-- 파일
alter table board add imageFile varchar(500);
▣ BoardVO.java
package domain;
public class BoardVO {
private int bno;
private String title;
private String writer;
private String content;
private String regdate;
private String moddate;
private int readCount;
private String imageFile;
public BoardVO() {}
// insert : title, writer, content
public BoardVO(String title, String writer, String content) {
this.title = title;
this.writer = writer;
this.content = content;
}
// list : bno, title, writer, regdate
public BoardVO(int bno, String title, String writer, String regdate, int readCount) {
this.bno = bno;
this.title = title;
this.writer = writer;
this.regdate = regdate;
}
// update : bno, title, content
public BoardVO(int bno, String title, String content) {
super();
this.bno = bno;
this.title = title;
this.content = content;
}
// detail : 전부
public BoardVO(int bno, String title, String writer, String content, String regdate, String moddate, int readCount, String imageFile) {
this.bno = bno;
this.title = title;
this.writer = writer;
this.content = content;
this.regdate = regdate;
this.moddate = moddate;
this.readCount = readCount;
this.imageFile = imageFile;
}
public int getBno() {
return bno;
}
public void setBno(int bno) {
this.bno = bno;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getWriter() {
return writer;
}
public void setWriter(String writer) {
this.writer = writer;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getRegdate() {
return regdate;
}
public void setRegdate(String regdate) {
this.regdate = regdate;
}
public String getModdate() {
return moddate;
}
public void setModdate(String moddate) {
this.moddate = moddate;
}
public int getReadCount() {
return readCount;
}
public void setReadCount(int readCount) {
this.readCount = readCount;
}
public String getImageFile() {
return imageFile;
}
public void setImageFile(String imageFile) {
this.imageFile = imageFile;
}
@Override
public String toString() {
return "BoardVO [bno=" + bno + ", title=" + title + ", writer=" + writer + ", content=" + content + ", regdate="
+ regdate + ", moddate=" + moddate + ", readCount=" + readCount + ", imageFile=" + imageFile + "]";
}
}
▣ BoardController.java
package controller;
import java.io.File;
import java.io.IOException;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import domain.BoardVO;
import handler.FileRemoveHandler;
import net.coobird.thumbnailator.Thumbnails;
import service.BoardService;
import service.BoardServiceImpl;
@WebServlet("/brd/*")
public class BoardController extends HttpServlet {
private static final long serialVersionUID = 1L;
// 로그 객체 생성
private static final Logger log = LoggerFactory.getLogger(BoardController.class);
// jsp에서 받은 요청을 처리, 그 결과를 다른 jsp로 보내는 역할을 하는 객체
private RequestDispatcher rdp;
private String destPage; // 응답할 jsp의 주소를 저장하는 변수
private int isOk; // db 구문 체크값 저장 변수
private BoardService bsv; // interface로 생성(service package에)
private String savePath; // 파일 저장 경로
public BoardController() {
// 생성자
bsv = new BoardServiceImpl(); // class로 생성(service package에) bsv 구현체 연결
}
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 실제 get post 요청처리
log.info("log 객체 test");
// request, response 객체의 인코딩 설정
request.setCharacterEncoding("utf-8"); // 요청 객체
response.setCharacterEncoding("utf-8"); // 응답 객체
// response는 jsp로 갈 응답 객체 => 화면을 생성해서 응답 => jsp 형식으로...
// contentType="text/html; charset=UTF-8"
response.setContentType("text/html; charset=UTF-8"); // html5 형식으로 보내라
// 경로 가져오기 /brd/register
String uri = request.getRequestURI();
log.info(uri); // /brd/register
String path = uri.substring(uri.lastIndexOf("/")+1);
log.info(path);
switch(path) {
case "register":
// 정보가 필요하다면... 정보를 DB에서 요청 request 객체 살고 보내기
destPage = "/board/register.jsp";
break;
case "insert":
try {
log.info("insert case in~!!");
// 첨부파일 없을 경우 처리
// jsp 화면에서 보내온 파라미터 값을 저장 => Service 전송
// String title = request.getParameter("title");
// String writer = request.getParameter("writer");
// String content = request.getParameter("content");
// BoardVO bvo = new BoardVO(title, writer, content);
// log.info(">>>>> bvo insert 객체 >>>>> {}", bvo);
// 첨부파일 있는 경우 처리
// byo를 구성하여 DB로 전송
// file을 저장하는 작업 => 파일 이름만 imageFile에 저장
// 첨부파일 형식으로 들어오게되면 모든 파라미터는 바이트단위로 분해되서 전송
// 바이트 단위로 전송된 파라미터의 값을 String으로 조립을 해야함.
// 1. 파일을 업로드할 물리적인 경로 설정
savePath = getServletContext().getRealPath("/_fileUpload");
log.info(">>> savePath > {}", savePath);
File fileDir = new File(savePath);
DiskFileItemFactory fileItemFactory = new DiskFileItemFactory();
// 파일 저장을 위한 임시 메모리 설정
fileItemFactory.setSizeThreshold(1024*1024*3);
// 저장 위치를 담은 File 객체
fileItemFactory.setRepository(fileDir);
BoardVO bvo = new BoardVO(); // 빈 객체 생성 후 set
// multipart/form-data 형식으로 넘어온 requst 객체를 다루기 쉽게 변환해주는 객체
ServletFileUpload fileUpload = new ServletFileUpload(fileItemFactory);
// request 객체를 FileItem 형식의 리스트로 리턴
List<FileItem> itemList = fileUpload.parseRequest(request);
// title, writer, content => text(String) imageFile => image
for(FileItem item : itemList) {
log.info("fileItem >> {}", item.toString());
switch(item.getFieldName()) {
case "title":
bvo.setTitle(item.getString("utf-8"));
break;
case "writer":
bvo.setWriter(item.getString("utf-8"));
break;
case "content":
bvo.setContent(item.getString("utf-8"));
break;
case "imageFile":
// 이미지 파일 여부를 체크
if(item.getSize() > 0) {
// 파일 이름 추출
// 경로 + ~~~/dog.jpg
String fileName = item.getName();
// 경로 빼고 이름만 가져오기
// String fileNmae2 = item.getName().substring(item.getName().lastIndexOf(File.separator)+1);
// File.separator : 파일경로 기호 => 운영체제마다 다를 수 있어서 자동 변환
// 시스템의 시간을 이용하여 파일을 구분 / 시간_dog.jpg
// UUID를 사용하는 구분도 있음. (=> 많이 사용)
fileName = System.currentTimeMillis()+"_"+fileName;
// 아까 경로 만들어 놓은 파일 fileDir + / + fileName
File uploadFilePath = new File(fileDir+File.separator+fileName);
log.info(">>> uploadFilePath > {}", uploadFilePath.toString());
// 저장
try {
item.write(uploadFilePath); // 객체를 디스크에 쓰기
bvo.setImageFile(fileName); // bvo에 저장할 값 (DB에 들어가는 값)
// 썸네일 작업 : 리스트 페이지에서 트레픽 과다 사용 방지
// fileDir + / +_th_ + fileName
Thumbnails.of(uploadFilePath).size(75, 75).toFile(new File(fileDir+File.separator+"_th_"+fileName));
} catch (Exception e) {
log.info(">> file writer on disk error");
e.printStackTrace();
}
}
break;
}
}
isOk = bsv.register(bvo);
log.info(">>> bco insert"+(isOk > 0 ? "성공":"실패"));
// 처리 후 목적지
destPage="/index.jsp";
} catch (Exception e) {
log.info("insert error!!");
e.printStackTrace();
}
break;
case "list":
try {
// 전체 리스트를 가지고 list.jsp로 전달
List<BoardVO> list = bsv.getList();
log.info(">>> list >>> {}", list);
// request 객체에 파라미터로 값을 보내는 방법
request.setAttribute("list", list);
destPage = "/board/list.jsp";
} catch (Exception e) {
log.info("list error!!");
e.printStackTrace();
}
break;
case "detail": case "modify":
try {
int bno = Integer.parseInt(request.getParameter("bno"));
// readCount 반영 (case가 detail일 경우만...)
if(path.equals("detail")) {
int readCount = bsv.readCount(bno);
log.info(">>>>> detail readCount >>>>> {}", readCount);
}
BoardVO bvo = bsv.getDetail(bno);
log.info(">>>>> detail bvo >>>>> {}", bvo);
request.setAttribute("bvo", bvo);
// if(path.equals("detail")) {
// destPage = "/board/detail.jsp";
// }else {
// destPage = "/board/modify.jsp";
// }
destPage = "/board/"+path+".jsp";
} catch (Exception e) {
log.info(""+path+"error!!");
e.printStackTrace();
}
break;
case "update":
try {
// int bno = Integer.parseInt(request.getParameter("bno"));
// String title = request.getParameter("title");
// String content = request.getParameter("content");
// BoardVO bvo = new BoardVO(bno, title, content);
// 첨부파일 처리 포함 방식
savePath = getServletContext().getRealPath("_fileUpload");
File fileDir = new File(savePath);
DiskFileItemFactory fileItemFactory = new DiskFileItemFactory();
fileItemFactory.setSizeThreshold(1024*1024*3); // 3MB 정도 설정
fileItemFactory.setRepository(fileDir);
BoardVO bvo = new BoardVO();
ServletFileUpload fileUpload = new ServletFileUpload(fileItemFactory);
List<FileItem> itemList = fileUpload.parseRequest(request);
// 원래 이미지 파일이 있었는데 변경하는 케이스
// 없던 이미지를 추가하는 케이스
String old_file = null;
for(FileItem item : itemList) {
switch(item.getFieldName()) {
case "bno" :
bvo.setBno(Integer.parseInt(item.getString("utf-8")));
break;
case "title" :
bvo.setTitle(item.getString("utf-8"));
break;
case "content" :
bvo.setContent(item.getString("utf-8"));
break;
case "imageFile" :
// 기존 파일 => 있을 수도 있고, 없을 수도 있고
old_file = item.getString("utf-8");
break;
case "newFile":
// 새로 추가된 파일 => 있을 수도 있고, 없을 수도 있고
if(item.getSize()>0) {
if(old_file != null) {
// 기존 파일이 있다면...
// 파일 삭제작업 : 별도 핸들러 작업 진행
FileRemoveHandler fileHandler = new FileRemoveHandler();
isOk = fileHandler.deleteFile(savePath, old_file);
}
// 새로운 파일 등록작업
String fileName = item.getName();
fileName = System.currentTimeMillis()+"_"+fileName;
File uploadFilePath = new File(fileDir+File.separator+fileName);
try {
item.write(uploadFilePath);
bvo.setImageFile(fileName); // 파일 이름 바꾸기
Thumbnails.of(uploadFilePath).size(75, 75).toFile(new File(fileDir+File.separator+"_th_"+fileName));
} catch (Exception e) {
log.info("File writer update error!!");
e.printStackTrace();
}
}else {
// 기존 파일은 있지만, 새로운 이미지 파일이 없다면...
// 기존 객체를 담기
bvo.setImageFile(old_file);
}
break;
}
}
int isOk = bsv.update(bvo);
log.info(">>>>> update >>>>>" +(isOk>0 ? "성공":"실패"));
// 컨트롤러 내부 케이스는 /brd/ 따로 적을 필요가 없음
destPage="detail?bno="+bvo.getBno();
}catch (Exception e) {
log.info("update error!!");
e.printStackTrace();
}
break;
case "delete":
try {
int bno = Integer.parseInt(request.getParameter("bno"));
int isOk = bsv.delete(bno);
log.info(">>>>> delete >>>>>" +(isOk>0 ? "성공":"실패"));
destPage="list";
} catch(Exception e){
log.info("delete error!!");
e.printStackTrace();
}
break;
}
// 목적지 주소(destPage)로 데이터를 전달(RequestDispatcher)
rdp = request.getRequestDispatcher(destPage);
// 요청에 필요한 객체를 가지고 destPage에 적힌 경로로 이동
rdp.forward(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// get으로 들어오는 요청을 처리하는 메서드 => service를 호출하여 처리
service(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// post로 들어오는 요청을 처리하는 메서드 => service를 호출하여 처리
service(request, response);
}
}
▣BoardService.java
package service;
import java.util.List;
import domain.BoardVO;
public interface BoardService {
int register(BoardVO bvo);
List<BoardVO> getList();
BoardVO getDetail(int bno);
int update(BoardVO bvo);
int delete(int bno);
int readCount(int bno);
}
▣ BoardServiceImpl.java
package service;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import dao.BoardDAOImpl;
import dao.BoardDao;
import domain.BoardVO;
public class BoardServiceImpl implements BoardService {
private static final Logger log = LoggerFactory.getLogger(BoardServiceImpl.class);
// dao 연결
private BoardDao bdao;
public BoardServiceImpl() {
bdao = new BoardDAOImpl();
}
@Override
public int register(BoardVO bvo) {
log.info(">>>>> register service in");
return bdao.insert(bvo);
}
@Override
public List<BoardVO> getList() {
// TODO Auto-generated method stub
return bdao.getList();
}
@Override
public BoardVO getDetail(int bno) {
// TODO Auto-generated method stub
return bdao.getDetail(bno);
}
@Override
public int update(BoardVO bvo) {
// TODO Auto-generated method stub
return bdao.update(bvo);
}
@Override
public int delete(int bno) {
// TODO Auto-generated method stub
return bdao.delete(bno);
}
@Override
public int readCount(int bno) {
// TODO Auto-generated method stub
return bdao.readCount(bno);
}
}
▣ BoardDao.java
package dao;
import java.util.List;
import domain.BoardVO;
public interface BoardDao {
int insert(BoardVO bvo);
List<BoardVO> getList();
BoardVO getDetail(int bno);
int update(BoardVO bvo);
int delete(int bno);
int readCount(int bno);
}
▣ BoardDaoImpl.java
package dao;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import domain.BoardVO;
import orm.DatabaseBuilder;
public class BoardDAOImpl implements BoardDao {
private static final Logger log = LoggerFactory.getLogger(BoardDAOImpl.class);
// DB와 연결 => mybatis 사용하여 연결 (mybatisConfig, db연결클래스, mapper)
// DB의 연결을 위한 객체
private SqlSession sql;
public BoardDAOImpl() {
new DatabaseBuilder();
sql = DatabaseBuilder.getFactory().openSession();
}
@Override
public int insert(BoardVO bvo) {
// mapper로 연결
log.info(">>>> insert DAO in!!");
// sql.insert(mapper의 namespace.id, 객체);
// insert / update / delete 구문은 commit 필요
int isOk = sql.insert("BoardMapper.add", bvo);
if(isOk > 0) {
sql.commit();
}
return isOk;
}
@Override
public List<BoardVO> getList() {
log.info(">>>> getList DAO in!!");
return sql.selectList("BoardMapper.list");
}
@Override
public BoardVO getDetail(int bno) {
log.info(">>>>> getDetail DAO in!!");
return sql.selectOne("BoardMapper.detail", bno);
}
@Override
public int update(BoardVO bvo) {
log.info(">>>>> update DAO in!!");
int isOk = sql.update("BoardMapper.up", bvo);
if(isOk > 0) sql.commit();
return isOk;
}
@Override
public int delete(int bno) {
// TODO Auto-generated method stub
int isOk = sql.delete("BoardMapper.del", bno);
if(isOk > 0) sql.commit();
return isOk;
}
@Override
public int readCount(int bno) {
int isOk = sql.update("BoardMapper.read", bno);
if(isOk > 0) sql.commit();
return isOk;
}
}
▣ boardMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="BoardMapper">
<!-- namespace는 daoImpl <-> mapper를 연결하기 위한 이름 -->
<!-- sql별 id를 생성하여 id를 통해 daoImpl이 어떤 sql 구문을 실행하는지 인지 id는 중복불가 -->
<!-- parameterType = 매개변수의 객체타입(생략가능), resultType = 결과로 나가는 객체 -->
<!-- 실제 SQL 구문사용 -->
<insert id = "add" parameterType="domain.BoardVO">
<!-- imageFile 추가 -->
insert into board(title, writer, content, imageFile)
values(#{title}, #{writer}, #{content}, #{imageFile})
</insert>
<select id="list" resultType="domain.BoardVO">
select * from board order by bno desc
</select>
<select id="detail" parameterType="int" resultType="domain.BoardVO">
select * from board where bno = #{bno}
</select>
<update id="up" parameterType="domain.BoardVO">
update board set title = #{title}, content = #{content}, moddate = now(), imageFile = #{imageFile} where bno = #{bno}
</update>
<delete id="del" parameterType="int">
delete from board where bno = #{bno}
</delete>
<update id="read">
update board set readCount = readCount + 1 where bno = #{bno}
</update>
</mapper>
▣ register.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>Board Register Page</h1>
<!-- 등록은 / 수정 post -->
<!-- enctype = "multipart/form-data" : 첨부파일을 가져갈 때 사용하는 타입 -->
<!-- 파일종류 : 이미지 파일만... 1개만 가능하도록 -->
<!-- 파일종류 중 이미지 파일 : image/png, image/jpg, image/gif -->
<form action = "/brd/insert" method="post" enctype="multipart/form-data">
title: <br>
<input type="text" name="title" placeholefer="제목..."><br>
writer: <br>
<input type="text" name="writer" placeholder = "작성자..."><br>
content: <br>
<textarea rows="10" cols="50" name="content" placeholder="내용을 입력하세요."></textarea><br>
file: <br>
<input type="file" name="imageFile" accept="image/jpg, image/gif, image/jpeg, image/png"><br>
<button type="submit">등록</button>
</form>
</body>
</html>
▣ list.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>Board List Page</h1>
<table>
<thead>
<tr>
<th>no.</th>
<th>title</th>
<th>writer</th>
<th>regdate</th>
<th>readCount</th>
</tr>
</thead>
<tobody>
<c:forEach items="${list }" var="bvo">
<tr>
<td>${bvo.bno }</td>
<td><a href="/brd/detail?bno=${bvo.bno }">
<img alt="" src="/_fileUpload/_th_${bvo.imageFile }">
${bvo.title }</a></td>
<td>${bvo.writer }</td>
<td>${bvo.regdate }</td>
<td>${bvo.readCount }</td>
</tr>
</c:forEach>
</tobody>
</table>
</body>
</html>
▣ detail.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>Board Detail Page</h1>
<img alt="" src="/_fileUpload/${bvo.imageFile }">
<table>
<thead>
<tr>
<th>no.</th>
<td>${bvo.bno }</td>
</tr>
<tr>
<th>title</th>
<td>${bvo.title }</td>
</tr>
<tr>
<th>writer</th>
<td>${bvo.writer }</td>
</tr>
<tr>
<th>readCount</th>
<td>${bvo.readCount }</td>
</tr>
<tr>
<th>regdate</th>
<td>${bvo.regdate }</td>
</tr>
<tr>
<th>moddate</th>
<td>${bvo.moddate }</td>
</tr>
<tr>
<th>content</th>
<td>${bvo.content }</td>
</tr>
</thead>
</table>
<a href="/brd/modify?bno=${bvo.bno }"><button type="submit">update</button></a>
<a href="/brd/delete?bno=${bvo.bno }"><button type="submit">delete</button></a>
<a href="/brd/list"><button type="button">list</button></a>
<hr>
<!-- comment line -->
<div>
<h3>Comment Line</h3>
<input type="text" id="cmtWriter" placeholder="writer..."><br>
<input type="text" id="cmtText" placeholder="Add Comment...">
<button type="button" id="cmtAddBtn">post</button>
</div>
<br>
<hr>
<!-- comment print line -->
<div id="commentLine">
<div>
<div>cno, bno, writer, regdate</div>
<div>
<button>수정</button> <button>삭제</button><br>
<input type="text" value="content">
</div>
</div>
</div>
<script type="text/javascript">
const bnoVal = `<c:out value="${bvo.bno }" />`;
console.log(bnoVal);
</script>
<script type="text/javascript" src="/resources/board_detail.js"></script>
<!-- 댓글 리스트 호출 -->
<script type="text/javascript">
printList(bnoVal);
</script>
</body>
</html>
▣ modify.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>Board Modify Page</h1>
<img alt="" src="/_fileUpload/_th_${bvo.imageFile }">
<form action="/brd/update" method="post" enctype="multipart/form-data">
<input type="hidden" name="bno" value="${bvo.bno }">
<table>
<thead>
<tr>
<th>no.</th>
<td>${bvo.bno }</td>
</tr>
<tr>
<th>title</th>
<td> <input type="text" name="title" value="${bvo.title }"> </td>
</tr>
<tr>
<th>writer</th>
<td>${bvo.writer }</td>
</tr>
<tr>
<th>regdate</th>
<td>${bvo.regdate }</td>
</tr>
<tr>
<th>moddate</th>
<td>${bvo.moddate }</td>
</tr>
<tr>
<th>content</th>
<td> <textarea rows="10" cols="50" name="content">${bvo.content }</textarea> </td>
</tr>
<!-- 파일 변경 -->
<tr>
<th>imageFile</th>
<td>
<input type="hidden" name="imageFile" value="${bvo.imageFile } }">
<input type="file" name="newFile" accept="image/jpg, image/gif, image/jpeg, image/png">
</td>
</tr>
</thead>
</table>
<!-- 수정버튼을 누르면 내가 수정한 내용을 가지고(form => submit) 컨트롤러로 이동 -->
<button type="submit">modify commit</button>
<!-- 리스트 버튼을 누르면 리스트페이지로 이동 -->
<a href="/brd/list"><button type="button">list</button></a>
</form>
</body>
</html>
▣ FileRemoveHandler.java
package handler;
import java.io.File;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class FileRemoveHandler {
private static final Logger log = LoggerFactory.getLogger(FileRemoveHandler.class);
// savePath, imageFileName 매개변수로 받아서 파일을 삭제하는 메서드
public int deleteFile(String savePath, String imageFileName) {
// return 삭제 여부의 값을 리턴
// 파일 삭제시... 경로포함파일명.delete() return true / false로 리턴
boolean isDel = false; // 삭제가 잘 되었는지 체크 변수
log.info(">>>> deleteFile method 접근~!! {}", imageFileName);
// 기존 파일 이름 객체 생성
File fileDir = new File(savePath);
File removeFile = new File(fileDir+File.separator+imageFileName);
File removeThFile = new File(fileDir+File.separator+"_th_"+imageFileName);
// 파일이 존재해야 삭제
if(removeFile.exists() || removeThFile.exists()) {
isDel = removeFile.delete(); // 원래 파일 삭제
log.info(">>>> removeFile !! {}", isDel);
if(isDel) {
isDel = removeThFile.delete();
log.info(">>>> removeTHFile !! {}", isDel);
}
}
return 0;
}
}
▷ 출력
'Java > JSP' 카테고리의 다른 글
JSP 기초(Login) - AWS 풀스택 과정 64일차 (0) | 2024.10.25 |
---|---|
JSP 기초(DB Join) - AWS 풀스택 과정 62일차 (0) | 2024.10.23 |
JSP 기초(DB 연결) - AWS 풀스택 과정 61일차 (0) | 2024.10.22 |
JSP 설정 및 기초 - AWS 풀스택 과정 60일차 (0) | 2024.10.21 |