♣ 파일 다운로드
◆ 파일 다운로드 알아야 할 내용
- @Controller에서는 아무 말도 없으면 View를 반환한다.
- 다운로드를 위해서는 View가 아니라 파일을 줘야 한다.(일반적이지 않다.)
- View를 반환하지 않기 위해
@ResponseBody
를 추가한다.
- 파일의 정보와 내용을 직접 설정해서 반환해야 한다.(HTTP 헤더 + 바디)
- 헤더와 바디를 직접 설정해서 반환하려면
ResponseEntity
를 사용해야 한다.
- 인증키를 주로 헤더에 첨부한다.
.body()
를 사용하면 내용을 작성해서 첨부할 수 있다.
.bulid()
를 사용할 수 있지만 내용을 입력하지 못한다.
- 헤더의 파일 정보를, 바디의 파일 데이터를 보낸다.
◆ 실제 파일 다운로드 처리 메서드
- 사용자에게 첨부파일 번호(attachmentNo)을 달라고 한다.
- attachmentNo를 사용하여 DB를 조회한다.
<ByteArrayResource>
: Byte 배열을 래핑(포장)한 클래스 이다.
- 없으면 사용자에게 404 notFount를 반환하고 종료한다.
- 있으면 실제 파일 데이터를 불러와야 한다.(single byte 입력)
- Apache commons IO 라이브러리 사용
- 헤더에 다음 정보를 설정한다.
- 파일명(Content-Disposition)
- 파일크기(Content-Length)
- 파일유형(Content-Type)
- 파일인코딩(Content-Encoding)
- 바디에 파일의 실제 데이터를 첨부한 뒤 반환하면 스프링이 나머지는 처리한다.
◆ Apache commons IO 라이브러리 추가
-> 구글에 maven repository 검색
-> apache commons IO 라이브러리 검색
<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.11.0</version> </dependency>
-> pom.xml에 코드 추가
- header : 통신을 해석하는 도구이다.
- body : 전송 방식에 따라 유무가 다르다.
-GET 방식에는 없고 POST방식에 있다.
- (주의!) 물리적인 경로는 jsp에 주소를 작성하면 안된다.
- 컨트롤러를 사용하여 작성한 주소를 사용해야 한다.