캐모마일 파일 모듈 가이드
개요
chamomile-file 모듈은 파일 관리, 파일 업로드, 파일 다운로드, 파일 정보 로깅 4가지 기능을 담당한다.
사용법
dependency 등록(pom.xml)
<dependency> <groupId>net.lotte.chamomile.module</groupId> <artifactId>chamomile-file</artifactId> </dependency>yml 파일 작성(application.yml)
chmm: file: repositoryPath: /files allowExtension: "" maxSize: 20MB directoryDateNameFormat: yyyy/MMsql 파일 실행을 통해 로깅용 테이블 생성
CREATE TABLE CHMM_FILE_DOWNLOAD_LOGGING ( file_downlaod_logging_id BIGINT PRIMARY KEY, // ID client_id VARCHAR(30), // 사용자 ID client_ip VARCHAR(50), // 사용자 IP request_url VARCHAR(255), // 요청 URL request_id VARCHAR(20), // 요청 ID session_id VARCHAR(20), // 세션 ID is_privacy_file char(1), // 개인정보 파일 여부 privacy_file_download_reason VARCHAR(255), // 개인정보 파일 다운로드 사유 file_hash VARCHAR(255), // 파일 해시 original_file_name VARCHAR(255), // 원본 파일 이름 file_path VARCHAR(255), // 파일 실제 위치 file_size INT, // 파일 사이즈 log_date TIMESTAMP // 로그 날짜 ); CREATE TABLE CHMM_FILE_LOGGING ( file_logging_id BIGINT PRIMARY KEY, client_id VARCHAR(30), // 사용자 ID client_ip VARCHAR(50), // 사용자 IP request_url VARCHAR(255), // 요청 URL request_id VARCHAR(20), // 요청 ID session_id VARCHAR(20), // 세션 ID file_action_type VARCHAR(10), // 파일 관리 상태 original_file_name VARCHAR(255), // 원래 파일 이름 file_size INT, // 파일 크기 file_path VARCHAR(255), // 실제 파일 위치 file_hash VARCHAR(20), // 파일 해시 코드 log_date TIMESTAMP // 로깅 날짜 );
파일 관리
FileUtil은 시스템 내의 용량 체크, 파일 핸들링, 권한 제어 등의기능을 담당한다.
권한 제어는 리눅스 환경에서 Owner의 권한만 제어가 가능하다.
FileUtil api목록
메서드명 | 파라미터 | 반환값 | 설명 |
---|---|---|---|
getStorageInfo | String path | long | 해당 디스크의 가용 용량을 반환.(MB단위) |
getStorageInfo | String path, FileSizeUnit unit | long | 해당 디스크의 가용용량을 반환(byte단위) |
makeFile | String path, String filename, byte[] data | 파일을 지정한 경로에 생성 | |
removeFile | String path | boolean | 파일을 삭제 |
copyFileToDir | String src, String destPath | 파일을 디렉토리로 복사 | |
copyDir | String src, String desc | 디렉토리 복사 | |
makeDir | String path | boolean | 디렉토리 생성 |
removeDirForce | String path | 디렉토리 강제삭제. 디렉토리가 비어있지 않아도 모든 디렉토리 삭제 | |
removeDir | String path | 디렉토리 삭제. 디렉토리가 비어있지 않으면 Exception | |
moveFile | String src, String desc | 파일이동 | |
moveDir | String src, String desc | 디렉토리 이동 | |
changeFileAuthReadable | File file, boolean readable | 파일의 읽기권한 제어 | |
changeFileAuthWriteable | File file, boolean writable | 파일의 쓰기권한 제어 | |
changeFileAuthExecutable | File file, boolean executable | 파일의 실행권한 제어 |
예제
가용용량 체크
localPath: 원하는 경로의 String을 입력
파일생성 및 삭제
임시파일을과 임시디렉토리를 생성한다.
생성한 임시파일의 byte데이터를 makeFile API에 넘긴다.
디렉토리 생성 및 삭제
현재 path에 dirTest라는 디렉토리를 만들고 삭제한다.
파일 및 디렉토리 복사
첫번째 임시 디렉토리와 임시 파일을 생성한다.
파일 및 디렉토리 이동
파일 업로드
FileUploader는 웹 서비스 요청으로 파일 업로드를 수행한다.
업로드 가능한 확장자, 파일 용량 체크, 파일 이름 난독화 등의 기능을 수행한다.
사용법
요청으로 들어온 file은 FileUploader에 넘겨준다.
업로드 수행된 후 관련 정보가 반환되며 DB에 추가로 저장하는 작업을 한다면 FileMetadataInfoEntity[] fileVo 를 이용하면 된다.
FileMetadataInfoEntity 객체 제공 데이터
메서드명 | 데이터 타입 | 설명 |
---|---|---|
fileMetaDataCode | String | 업로드 후 hash값으로 변환된 파일명. |
fileUploadPath | String | 업로드된 실제 경로 |
originalFileName | String | 실제 파일 이름 |
fileSize | long | 업로드된 파일의 크기 |
파일 다운로드
FileDownloader는 웹 서비스상에서 파일을 클라이언트에게 전송하는 역할을 한다.
사용법
루트 디렉토리에서 파일 다운로드 하는 경우
@Autowird FileDownloader fileDownloader; @GetMapping("/download/{fileName}") public ResponseEntity<byte[]> download(@PathVariable String fileName){ return FileDownloader.fileDownload( fileName, // 서버에 실제 파일주소 "text.txt"); //클라이언트에 노출할 파일명개인정보가 포함된 파일 다운로드의 경우
@Autowird FileDownloader fileDownloader; @GetMapping("/download/{fileName}") public ResponseEntity<byte[]> download(@PathVariable String fileName, String message) { return FileDownloader.fileDownload( fileName, // 서버에 실제 파일주소 "text.txt", //클라이언트에 노출할 파일명 ,message); // 개인정보 파일은 다운로드 하는 사유
파일 로깅
파일 업로드/다운로드/삭제 이력은 chamomile-logging 모듈을 의존하여 구현하였으며, FileDownloader, FileUploader, FileUtil 사용시 아래와 같은 로그가 파일 및 데이터베이스에 다음과 같이 저장한다.
파일 다운로드시 남기는 로그 내용 로그 날짜, 리퀘스트 아이디, 세션 아이디, 사용자 아이디, 접속 IP, 접속 URL, 다운로드 파일명, 파일 사이즈, 다운로드 사유
파일 업로드/삭제시 남기는 로그 내용 로그 날짜, 리퀘스트 아이디, 세션 아이디, 사용자 아이디, 접속 IP, 접속 URL,업로드 경로,업로드 파일명,파일 사이즈, 파일 업로드/삭제 상태
사용법
위에 작성된 CHMM_FILE_DOWNLOAD_LOGGING
, CHMM_FILE_LOGGING
테이블이 생성되어있다면 의존성 주입 시 자동으로 동작한다.