고래씌
[Spring] 8-4. 첨부파일 사진 다운로드 본문
1. 사진 다운로드 추가
▶ boardDetailView.jsp
=> 빨간 밑줄 코드 추가
▶ BoardController.java
=> ResourceLoader 의존성 주입을 위해서 추가
// 사진 다운로드
@GetMapping("/fileDownload/{boardNo}")
public ResponseEntity<Resource> fileDownload(@PathVariable("boardNo") int boardNo) {
ResponseEntity<Resource> responseEntity = null;
// db에서 board테이블에서 boardNo값과 일치하는 행의 파일정보 조회
BoardExt b = boardService.selectBoard(boardNo);
if(b.getOriginName() == null) {
return responseEntity.notFound().build(); // 응답상태 404로 설정후 반환
}
// Resource객체로 파일 얻어오기
String saveDirectory = application.getRealPath("/resources/images/board/" + b.getBoardCd() + "/");
// 디렉토리 경로(saveDirectory)상에서 두번째 매개변수로 전달받은 파일을 찾아서 객체 생성
File downFile = new File(saveDirectory, b.getChangeName());
Resource resource = resourceLoader.getResource("file:"+downFile);
try {
String filename = new String(b.getOriginName().getBytes("utf-8"), "iso-8859-1");
// utf-8 방식으로 인코딩된 데이터(문자열)을 iso-8859-1로 변환 → http통신할 때 인코딩방식을 iso-8859-1로 해야하기 때문
responseEntity = ResponseEntity.ok()
// 내가 넘겨주고자하는 데이터가 바이너리형식의 데이터임을 의미
.header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_OCTET_STREAM_VALUE)
// CONTENT_DISPOSITION : 파일을 첨부파일 형태로 처리하겠다는 의미(다운로드)
.header(HttpHeaders.CONTENT_DISPOSITION , "attachment;filename="+filename)
.body(resource);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return responseEntity;
}
=> 우리는 boardMapper에서 id가 selectBoard를 가져오기 때문에 BoardDaoImpl.java에서 버전2를 주석처리하고 다시 버전1로 실행함
▶ BoardDaoImpl.java
// 일반 게시글 상세보기
@Override
public BoardExt selectBoard(int boardNo) {
// 버전1) 쿼리문 한번실행
return sqlSession.selectOne("boardMapper.selectBoard", boardNo);
// 버전2) 쿼리문 두번실행
// return sqlSession.selectOne("boardMapper.selectBoardOnly", boardNo);
}
▶ 결과
=> 다운로드 클릭하면 정상적으로 다운로드가 실행되는 것을 알 수 있다!
'Server > Spring' 카테고리의 다른 글
[Spring] 9. 댓글 목록, 등록, 수정, 삭제(비동기식) (0) | 2024.01.26 |
---|---|
[Spring] 8-5. 게시판 수정하기(+ 사진삭제, 사진수정, 사진추가) (0) | 2024.01.26 |
[Spring] 8-3. 일반 게시판 상세보기, 조회수 증가 (0) | 2024.01.25 |
[Spring] 8-2. 사진게시판(사진 여러개일 때(다중 insert문)) (0) | 2024.01.24 |
[Spring] 8-1. 일반 게시글 등록(크로스사이트스크립트 공격 방지) (0) | 2024.01.24 |