쌓고 쌓다

[스프링 부트] 게시글 삭제시 첨부파일 삭제 - 20 본문

프로그래밍/spring

[스프링 부트] 게시글 삭제시 첨부파일 삭제 - 20

승민아 2023. 8. 7. 09:26

게시글 삭제시 해당 게시글에 포함되어 서버 내부에 저장된 파일 또한 같이 삭제하는 기능이다.

 

파일 삭제 자체 방법은 간단하다.

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 정보를 제거해준다.

 

 

Comments