JAVA/SPRINGBOOT
SRPING BOOT - 파일 DB 저장 하여 사용하는 방법
인천쓰
2024. 7. 9. 18:34
반응형
파일을 저장하여, 다운로드까지 쓰는 자료실을 구현을 맡아 진행하였다.
일단 사이트에서 파일을 내가 설정한 경로로 저장을 할수있게
application.properties 에 경로 설정하여 @VALUE로 뽑아쓰면된다 !
nas.filepath=/path/to/nas/directory
나는 .env 방식으로 썻지만 설명을 간단하게 하기위해 이방법으로 설명하겠다
//서비스
@Value("${nas.filepath}")
private String nasFilePath;
public List<String> saveFiles(List<MultipartFile> files) throws IOException {
Path root = Paths.get(nasFilePath);
if (!Files.exists(root)) {
Files.createDirectories(root);
}
List<String> filePaths = new ArrayList<>();
for (MultipartFile file : files) {
if (file.isEmpty()) {
throw new IOException("Failed to store empty file " + file.getOriginalFilename());
}
Path destinationFile = root.resolve(Paths.get(file.getOriginalFilename())).normalize().toAbsolutePath();
Files.copy(file.getInputStream(), destinationFile);
filePaths.add(destinationFile.toString());
}
return filePaths;
}
////////////////////////////////////////////////////////////////////////////////////////////////
//컨트롤
@PostMapping("/upload")
public ResponseEntity<List<String>> uploadFiles(@RequestParam("files") List<MultipartFile> files) {
try {
List<String> filePaths = fileUploadService.saveFiles(files);
return ResponseEntity.status(HttpStatus.OK).body(filePaths);
} catch (Exception e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null);
}
}
그후 서비스에 파일들을 가져오기위해 list하여 풀어서 데이터를 뽑아주면 끝이다 . 간단하죠?
이걸 응용하면 db에는 저장된 경로와 파일명이 받아지고, 나중에 그경로에서 데이터를 뽑아 다운로드나 출력을 해주면 된다 .
파일을 로컬에다 저장하면 이미지같은 출력을 할때 문제가 생기니 꼭 리눅스 nas환경에 저장해서 쓰길바란다
다운로드 하는부분엔 문제없이 쓸수있다.
응용은 본인의 몫!
반응형