Spring
[Java] Spring 리소스(Resource) 파일 읽어오기, 다운로드
nineDeveloper
2020. 3. 19. 10:13
728x90
코틀린이 필요하다면 링크 참조: https://freedeveloper.tistory.com/465
Maven 또는 Gradle 기반 프로젝트는 /src/main/resources
디렉토리에 리소스 파일을 저장하도록 되어 있다
이 디렉토리에 위치한 파일들은 .jar
파일로 빌드시 최상위인 루트 디렉토리에 위치하게 되는데 이 말은 런타임시 해당 파일들이 ROOT CLASSPATH에 위치한다는 것을 의미한다
CLASSPATH의 ROOT에 위치하므로 위와 같이 절대 경로인 /를 앞에 명시함으로서 리소스 파일을 로드할 수 있다. 상대 경로를 명시할 경우 명령을 호출한 클래스의 위치에 따라 경로가 달라진다
리소스 파일 읽어오기
getClass().getResourceAsStream(String path)
: resources
디렉토리 안에 있는 파일을 InputStream
형태로 반환 해준다
만약 대상 리소스 파일이 존재하지 않을 경우 java.lang.NullPointerException
을 발생시킨다.
resources/file/sampleUpload.xlsx
파일을 읽어 오는 예시
String fileName = "sampleUpload.xlsx";
Path filePath = Paths.get(File.separatorChar + "file", File.separatorChar + fileName);
getClass().getResourceAsStream(filePath.toString())
리소스 파일 문자열 획득하기
대상 리소스 파일이 텍스트일 경우 Apache Commons IO가 제공하는 IOUtils.toString()
를 이용하여 대상 리소스 파일을 간편하게 문자열로 획득할 수 있다.
// /src/main/resources/something.txt 파일을 읽어 온다.
String something = IOUtils.toString(getClass().getResourceAsStream("/something.txt"), "UTF-8");
리소스 파일 다운로드 하기
서비스 구현부
/**
* Sample 엑셀 다운로드
* @return
* @throws IOException
*/
public ResponseEntity<Resource> getSampleExcel() throws IOException {
String fileName = "sampleUpload.xlsx";
Path filePath = Paths.get(File.separatorChar + "file", File.separatorChar + fileName);
Resource resource = new InputStreamResource(getClass().getResourceAsStream(filePath.toString()));
return ResponseEntity.ok()
.contentType(MediaType.APPLICATION_OCTET_STREAM)
.cacheControl(CacheControl.noCache())
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + fileName + "")
.body(resource);
}
컨트롤러 구현부
@ApiOperation(value = "Sample 엑셀 양식 다운로드")
@GetMapping("/excel")
public ResponseEntity<Resource> getSampleExcel() throws IOException {
return sampleService.getSampleExcel();
}
참고글
728x90