이 글은 Velog에서 이전한 글입니다. Velog 원문 보기
BoardController 안의 메서드
@GetMapping("/attach/{postId}")
public ResponseEntity<Resource> downloadAttach(@PathVariable Integer postId) throws MalformedURLException {
Board post = boardService.findById(postId); //post를 접근할 수 있는 사용자만 사진 다운로드 가능
String imageFilename = post.getFilename(); //사용자가 업로드한 파일 이름
String imageFilepath = post.getFilepath(); //DB에 저장하는 파일 경로
UrlResource resource = new UrlResource("file:" + fileStore.getFullPath(imageFilepath));
String encodedUploadFileName = UriUtils.encode(imageFilename, StandardCharsets.UTF_8); // 한글, 특수문자가 깨지는 것을 방지
String contentDisposition = "attachment; filename=\"" + encodedUploadFileName + "\"";
return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_DISPOSITION, contentDisposition)
.body(resource);
}
downloadAttach는 파일을 다운로드 할 때 실행되는 메서드이다.
파일 다운로드 시 권한 체크같은 복잡한 상황까지 가정해서 이미지의 id를 요청하도록 했다.
또한, 파일 다운로드시에는 사용자가 업로드한 파일 이름으로 다운로드 하는 것이 좋기에 Content-Disposition헤더에 attachment; filename="업로드 파일명"값을 줬다.
boardDetail.html 중 파일 관련 html
<span th:if="${post.filepath != null}">
<img th:src="@{'/images/' + ${post.filepath}}" width="300" height="300"/><br>
<!-- 파일 다운로드 -->
사진 다운로드: <a th:href="|/attach/${post.id}|" th:text="${post.getFilename()}"/>
</span>
간단한 파일 다운로드 html이다. th:text를 이용해 사용자가 업로드한 파일의 이름을 사용했다.
파일 다운로드 기능 구현은 끝났다. 작동이 잘 되는지 확인해보자.

이전에 작성해준 게시글이다. 밑에 있는 사진 다운로드의 링크를 클릭했을때 사진이 다운로드 된다면 성공이다.


다행히 기능이 잘 작동한다.
여전히 부족한 점이 많다.
- 업로드한 파일을 삭제하게 만들고 싶다.
- 첨부파일 업로드, 다운로드
등등 파일 업로드 부분을 제외하고 다른 부분에서도 수정해야 할 부분이 많다.
앞으로는 김영한님의 Spring MVC2 강의를 보면서 로그인 기능, 세션, 쿠키 등을 공부하고 나의 게시판에 추가하면서 공부할 예정이다. 또한, 앞으로도 꾸준히 이전의 코드들을 개선시킬 것이다.
개인적으로 존경하는 개발자이신 김영한님이 강의를 들을 때 3가지를 하면 실력 향상에 큰 도움이 된다고 하셨다.
- 강의를 보며 따라치기
- 강의 내용 정리하기
- 토이 프로젝트를 하며 적용하기
처음에는 강의를 보며 따라치기만 했지만 다시 하나하나 복습을 하면서 강의 내용 정리를 하고 프로젝트에 적용도 시켜보고 있다. 실제로 이해에 큰 도움이 되는 것 같다. 큰 도움이 되고 있습니다 영한님!
글에서 부족한 부분이 많을 것 같습니다. 모든 지적을 환영합니다!!
더 자세한 코드는 깃허브를 참고해주세요!
'Project > 나의 작은 프로젝트' 카테고리의 다른 글
| 💡 게시판 - 검증(Bean Validation) (0) | 2026.07.21 |
|---|---|
| 💡 게시판 - 메시지, 국제화 (0) | 2026.07.21 |
| 💡 게시판 - 파일 업로드 3(개선) (0) | 2026.07.20 |
| 💡 게시판 - 파일 업로드 2 (0) | 2026.07.20 |
| 💡 게시판 - 파일 업로드 (0) | 2026.07.20 |