파일 다운로드 기능 구현
MultipartFile
- 업로드 한 파일을 표현할 때 사용되는 인터페이스
- getContentType() = 파일 타입 조회
- getName() = 파일명 조회
- getOriginalFilename() = 파일명 조회 (확장자 포함)
- getSize() = 파일 크기 조회 (byte 단위)
- transferTo() = 해당 경로로 파일 업로드
※ 파일 경로 입력시 [디렉터리 경로 + "\\" + 파일명]으로 입력해야 지정한 디렉터리에 지정한 파일명으로 파일을 업로드함
(Window의 특징 => "/"이 아닌 "\\" 입력)
- HTML의 <input>을 통해 파일을 받을 경우 @RequestParam()의 name값과 HTML 파일의 <input>에서의 name값이 서로 일치해야 함
- Controller에서 MultipartFile을 전송받기 위해서는 HTML의 <form>의 ecntype 속성이 multipart/form-data로 설정되어있어야 함
<form>태그의 enctype 속성
- 기본값 = application/x-www-form-urlencoded (텍스트 데이터 전송시)
- multipart/form-data = 텍스트 데이터와 바이너리 데이터를 각 파트별로 나누어 함께 전송 (파일이나 이미지를 서버로 전송시 주로 사용)
- multipart/form-data을 사용할 경우 POST 방식으로만 데이터를 전송해야함 (Spring에서 그렇게 하도록 하드코딩으로 설정되어있음)
UUID
- 중복되지 않은 고유한 키 값을 설정해주는 클래스
- randomUUID() = 랜덤으로 키값을 설정 (파이썬의 hash()와 비슷)
File 클래스
- File(경로).exists() = 해당 경로에 파일이 존재하는지 true/false 반환
- File(경로).mkdir() = 해당 경로에 폴더 생성
※ Path path = Paths.get() => 해당 경로를 path 객체에 저장
ResponseEntity
- 응답으로 변환될 데이터를 모두 담은 요소들을 객체로 만들어서 반환할때 사용 (파일 다운로드)
- ResponseEntity는 인자값으로 body, header, status를 받을 수 있는데 body, header는 선택적으로 입력 가능하고status는 필수로 입력해줘야함
- ResponseEntity입력시 <>에 입력하는 설정은 body를 어떤 데이터 타입으로 설정할 것인지 입력하는 것
- ResponseEntity를 파일 다운로드에 이용할 때는 body를 Resource 타입으로 지정하여 사용
ex) ResponseEntity<Resource>(resource, header, status)
- 자원 => InputStreamResource(Files.newInputStream(경로))를 통해 파일 내용을 읽어와 Resource로 반환
- 헤더 => setContentDisposition()로 웹페이지에서 응답 데이터를 어떻게 표시할지 설정
※ ContentDisposition.builder("attachment")로 설정해야 사용자가 로컬에서 다운로드 가능
ex) headers.setContentDisposition(ContentDisposition.builder("attachment").filename("file.txt").build());
=> 사용자가 로컬에서 file.txt라는 이름으로 해당 파일을 다운로드 받을 수 있도록 헤더 설정
- 상태 => HttpStatus(Enum 타입) 사용
.OK = 요청 성공 처리, .NOT_FOUND = 요청에 해당하는 파일 없음 처리
※ HttpStatus 상태 코드 설명 링크
https://developer.mozilla.org/ko/docs/Web/HTTP/Status
HTTP 상태 코드 - HTTP | MDN
HTTP 응답 상태 코드는 특정 HTTP 요청이 성공적으로 완료되었는지 알려줍니다. 응답은 5개의 그룹으로 나누어집니다: 정보를 제공하는 응답, 성공적인 응답, 리다이렉트, 클라이언트 에러, 그리고
developer.mozilla.org
JPA Auditing
- Spring Data JPA에서 시간에 대해서 자동으로 값을 넣어주는 기능
관련 어노테이션
- @EnableJpaAuditing = JPA Auditing 활성화 (application 클래스에 입력)
- @EntityListeners(AuditingEntityListener.class) = 해당 클래스에 Auditing 기능을 포함시킴
- @CreatedDate = 해당 필드 데이터 생성시 생성 시간 데이터 저장
- @LastModifiedDate = 해당 필드 데이터 생성시 수정 시간 데이터 저장
※ @CreatedDate, @LastModifiedDate,@GeneratedValue로 지정한 컬럼은 해당 컬럼 이외의 컬럼 데이터를 DB로 전송시 자동으로 데이터가 생성되어 입력되기 때문에 DTO => Entity 변환시 builder()로 값을 지정해줄 필요 X
'빅데이터 부트캠프 > Spring boot' 카테고리의 다른 글
| MyBatis 세팅 (0) | 2022.12.13 |
|---|---|
| 빅데이터 부트캠프 97일차 (0) | 2022.11.23 |
| 빅데이터 부트캠프 96일차 (0) | 2022.11.22 |
| 빅데이터 부트캠프 94일차 (0) | 2022.11.18 |
댓글