쌓고 쌓다
[스프링 부트] 게시글 삭제시 첨부파일 삭제 - 20 본문
게시글 삭제시 해당 게시글에 포함되어 서버 내부에 저장된 파일 또한 같이 삭제하는 기능이다.
파일 삭제 자체 방법은 간단하다.
File file = new File("저장된 파일 경로");
// EX) /Users/lsm/Desktop/imgFolder/abc.png (맥 기준)
if(file.exists())
file.delete();
그럼 내가 만들어보고있는 게시판에 적용해보자.
UploadFileRepository
public interface UploadFileRepository extends JpaRepository<UploadFile, Long> {
List<UploadFile> findByPno(Long pno);
}
첨부파일 리포지토리에 게시글 번호 pno로 해당 게시글의 파일 객체들을 찾는 메서드를 추가했다.
UploadFileService
@Service
public class UploadFileService {
private UploadFileRepository uploadFileRepository;
private FileStore fileStore;
...
public void deleteUploadFile(UploadFile uploadFile) {
String fullPath = fileStore.getFullPath(uploadFile.getStoreFileName());
File file = new File(fullPath);
if(file.exists())
file.delete(); // 파일 삭제
uploadFileRepository.delete(uploadFile); // DB에서 파일 정보 삭제
}
}
FileStore 클래스에 파일명을 던져주면 파일명과 저장 위치를 합쳐 전체 경로로 반환해주는 getFullPath 메서드를 작성했었다.
이 메서드를 사용하여 파일의 전체 경로를 구하여 File 클래스를 사용하여 삭제한다.
그리고 DB에서도 파일에 대한 정보를 삭제시켜주자.
PosterController
@Controller
public class PosterController {
@GetMapping("/poster/delete")
public String delete(@RequestParam(value="id") Long id) {
commentService.deleteCommentByPno(id); // 댓글 삭제
List<UploadFile> uploadFileList = uploadFileService.findByPno(id);
for (UploadFile uploadFile : uploadFileList) {
uploadFileService.deleteUploadFile(uploadFile); // 파일 삭제
}
posterService.deletePoster(id); // 게시글 삭제
return "redirect:/posters";
}
}
게시글 삭제시 해당 게시글의 PK인 id를 통해서 업로드된 파일들의 List를 받는다.
List를 돌며 uploadFileService를 통해 파일의 정보 UploadFile를 이용하여 서버내 파일과 DB 정보를 제거해준다.
'프로그래밍 > spring' 카테고리의 다른 글
Spring MVC 사용 방식 (0) | 2023.08.08 |
---|---|
뷰 리졸버 동작 (0) | 2023.08.07 |
핸들러 매핑과 핸들러 어댑터 이해하기 (0) | 2023.08.06 |
[스프링 부트] 파일 응답 및 이미지 출력, MIME 타입 확인 - 19 (0) | 2023.08.05 |
Spring MVC 구조 (0) | 2023.08.05 |
Comments