1. 게시판 파일 업로드
1) 데이터베이스 내 column 추가 - filename, filepath
2) entity
private String filename;
private String filepath;
public String getFilename() {
        return filename;
}
public void setFilename(String filename) {
    this.filename = filename;
}
public String getFilepath() {
    return filepath;
}
public void setFilepath(String filepath) {
    this.filepath = filepath;
}추가한 column에 대한 entity 변수 정의
3) view (html)
boardwrite.html
<div class="layout">
    <form action="/board/writedo" method="post" enctype="multipart/form-data">
        <div class="mb-3">
            <label for="exampleFormControlInput1" class="form-label">Name</label>
            <input id="exampleFormControlInput1" name="title"  type="text"><br>
        </div>
        <div class="mb-3">
            <label for="exampleFormControlTextarea1" class="form-label">Example textarea</label><br>
            <textarea id="exampleFormControlTextarea1" name="content"></textarea>
        </div>
        <input type="file" name="file">
        <button type="submit">작성</button>
    </form>
</div>mutipart 선언과 파일 업로드 input 박스 추가
4) service
 public void write(Board board, MultipartFile file) throws Exception{
    String projectPath = System.getProperty("user.dir") + "/src/main/resources/static/files";
    UUID uuid = UUID.randomUUID();
    String fileName = uuid + "_" + file.getOriginalFilename();
    File saveFile = new File(projectPath, fileName);
    file.transferTo(saveFile);
    board.setFilename(fileName);
    board.setFilepath("/files/" + fileName);
    boardRepository.save(board);
}projectPath : 저장경로 지정
uuid : 파일 이름에 붙일 랜덤 이름 생성
filename : 랜덤이름을 파일 네임 앞에 붙이고 파일이름으로 파일명 생성
saveFile : 파일을 생성하는데 projectPath에 담고, name이름으로 담기는 의미
file.transferTo() : 예외처리 필요하므로 throw 이용
board.setFilename(fileName); 
board.setFilepath("/files/" + fileName);
-> 데이터를 넣기 위해 filename과 filepath를 set해준다.
5) controller
@PostMapping("/board/writedo")
public String boardWritePro(Board board, Model model, MultipartFile file) throws Exception{
    boardService.write(board, file);
    model.addAttribute("message", "글 작성이 완료되었습니다.");
    model.addAttribute("searchUrl","/board/list");
    return "message";
}@PostMapping("/board/update/{id}")
public String boardUpdate(@PathVariable("id") Integer id, Board board, Model model, MultipartFile file) throws Exception{
    Board boardTemp = boardService.boardView(id);
    boardTemp.setTitle(board.getTitle());
    boardTemp.setContent(board.getContent());
    boardService.write(boardTemp, file);
    model.addAttribute("message", "글 수정이 완료되었습니다.");
    model.addAttribute("searchUrl","/board/list");
    return "message";
}메소드 매개변수로 file 변수를 받고 예외처리도 해줌
.write() 메소드 매개변수에도 file을 추가해줌
6) view (html)
boardview.html
<body>
<h1 th:text="${board.title}">제목입니다.</h1>
<p th:text="${board.content}">내용이 들어갈 부분입니다.</p>
<a th:href="@{${board.filepath}}">다운받기</a>
<a th:href="@{/board/delete(id=${board.id})}">글 삭제</a>
<a th:href="@{/board/modify/{id}(id=${board.id})}">글 수정</a>
</body>다운받기 버튼을 우르면 이미지가 있는 경로에 가서 이미지 보여줌
https://minddokddok.tistory.com/34?category=1040940
스프링 부트(Spring Boot)로 간단한 게시판 만들기 - 4
이전 단계였던 게시물 삭제 기능 구현에 이어, 게시물 수정을 해보도록 하자 6) 게시물 수정 - 게시물 수정 페이지 생성 우선, 게시물 수정 버튼을 만들어주자. view부분에 넣어줘야하기에 boardview.
minddokddok.tistory.com
위 해당글을 참고하였습니다.
'Spring > SpringBoot' 카테고리의 다른 글
| [SpringBoot] 호텔예약사이트 - 로그인 구현 (0) | 2024.03.10 | 
|---|---|
| [SpringBoot] 간단한 게시판 생성_페이징처리 (0) | 2024.01.20 | 
| [SpringBoot] 간단한 게시판 생성_글수정 (0) | 2024.01.15 | 
| [SpringBoot] 간단한 게시판 생성_목록, 상세, 삭제 (0) | 2024.01.14 | 
| [SpringBoot] 간단한 게시판 생성_글등록 (0) | 2024.01.12 | 
 
                    
                   
                    
                   
                    
                  