[TIL] 20. File 업로드

김지수·2024년 5월 20일

TIL

목록 보기
20/53

https://velog.io/@gun_123/java-%ED%8C%8C%EC%9D%BC-%EC%97%85%EB%A1%9C%EB%93%9C-%EC%B2%98%EB%A6%AC
참고해서 파일업로드 코드를 작성했다.

@Value("${file.upload/path}") private String uploadPath; : 파일 업로드 경로를 설정하기 위해 application.properties 에서 file.upload/path=C:\Users\admin\Desktop\sparta\week1\create-schedule\src\main\resources\static 프로퍼터 값을 가져와 'uploadPath' 변수에 주입했다.
업로드가 이미지인지 확인을 하고 객체에서 원본파일 이름을 가져온다.
assert orginalName != null; 는 원본 파일 이름이 null이 아닌지 확인한다.
String fileName = orginalName.substring(orginalName.lastIndexOf("\") + 1); 는
경로가 포함된 원본 파일 이름에서 마지막 디렉토리 구분자인 역슬래시('')를 기준으로 파일 이름을 추출한다. 마지막 역슬래시의 인덱스를 반환하고 그 위치부터 문자열을 잘라내어 파일 이름만 가져온다.

날짜 기반으로 새로운 폴더를 생성하는 기능을 수행한다.

UUID.randomUUID().toString() 메서드를 사용하여 고유한 식별자인 UUID를 생성하고 문자열로 변환한다.

tring saveName = uploadPath + File.separator + folderPath + File.separator + uuid + "_" + fileName;
파일을 저장할 경로와 파일 이름을 결합하여 전체 저장 경로를 만든다.
예를 들어 uploadPath가 "C:\uploads", folderPath가 "2024\05\20", uuid가 "123e4567-e89b-12d3-a456-426614174000", 그리고 fileName이 "example.jpg"라면, saveName은 "C:\uploads\2024\05\20\123e4567-e89b-12d3-a456-426614174000_example.jpg"가 됩니다.
Path savePath = Paths.get(saveName); 는 문자열로 경로를 'Path'객체로 변환한다.
uploadFile.transferTo(savePath); 는 uploadFile 객체의 transferTo() 메서드를 사용하여 파일을 지정된 savePath에 저장한다.

업로드된 파일을 고유한 이름으로 서버에 저장하고 저장된 파일의 정보를 클라이언트 반환한다.


오늘의 회고

긍정적인 점

오늘 과제에 대해서 피드백을 주신 부분에 대해서 수정하면서 새로 배웠다.
단일 책임 원칙(Single Responsibility Principle): 각 레이어는 하나의 역할에만 집중해야 한다. Service 레이어는 비즈니스 로직을 처리하고, Controller 레이어는 요청과 응답을 처리해야 한다. Schedule 객체를 Service에서 Response DTO로 변환하는 것은 이 원칙을 위반하는 것으로 간주될 수 있다.

부정적인 점

파일 업로드의 코드를 짜면서 안되다보니 쉬다가 다시 하고 그러면서 휴식을 많이 취한 것 같다.

느낀 점

과제 제재출을 위해 시간을 할애하여 성과를 내기 위해 노력했다. 과제를 위해 새로운 것을 많이 배운 것 같다.

profile
서툴고 부족한 점이 많지만, 배우고 발전하며 성장하기 위해 노력하겠습니다.

0개의 댓글