16강(스프링부트 환경에서 파일업로드 만들기)
어플리케이션 프로퍼티에 얘네를 추가.
src 하위 폴더를 만들어주고 index.jsp에 컨트롤 스페이스 해서 html5를 고름
EUC-KR들을 UTF-8로 바꿈
body안에 파일업로드 폼만들기
파일 업로드를 위해 jsp 파일을 만들었다.
2가지 라이브러리 추가(tomcat-embed-jasper/jstl)
FileController에 @GetMapping을 @PostMapping으로 바꿔주고 url 적어줌.
form 태그에서 method="post" 추가
body값이 0으로 나오면서 버튼이 안 뜬다 뭐가 문제일까.
문제는 index.html이란 파일이 static에 들어 있었기 때문이다.
스프링 부트에 web 의존성을 추가하고 localhost:8080에 접근하면 기본적으로 resources폴더에 있는 static에 위치한 index.html 파일을 읽게 된다. 그럼 그냥 얘를 삭제 해버리면 어떻게 될까?
와 실행이 잘 된다.
예전에 스프링 강의에서 얼핏 들었던 거 같은데 자세히 기억이 안 난다. 상위 폴더부터 읽어 들여서 파일 이름이 매칭이 되는 애를 먼저 읽어 들이는 형식이라고 했던거 같기도 한데 이건 나중에 더 자세히 찾아봐야겠다.
실제로 static과 views에 동일한 파일 이름이 들어가면 static의 파일이 브라우저에 뜨게 된다. 신기하다..
인제 파일업로드를 눌러보면
결과가 JSON으로 출력이된다. 이제 form에서 선택한 파일을 FileController 에서 받는다.
파일첨부에는 무조건 파일을 선택하게끔 필수체크 기능을 넣어줘야한다.
파일을 선택하지 않고 업로드를 했을 경우
데이터가 null이라고 필수체크 로직이 잘 돌아간다.
이제 파일을 저장해보자.
dest 파일을 transferTo메소드로 저장하고 파일이 저장될 경로를 지정
파일이 저장될 상위 경로 지정. 파일을 저장할 때 파일 이름은 고유여야 하기 때문에 자바 UUID클래스 사용. 그리고 확장자를 넣는다.
그리고 트라이캐치 걸어주고 실행해보자.
오류가 난다.. 해결방법을 찾아보자.
지정된 경로를 찾을 수 없다고 한다.
global local properties에 C:드라이브로 바꿔보자
해당 경로에 폴더가 없다고 에러가 났다. 다시 해결해보자..
저장될 파일 상위경로에 폴더가 없으니 만들어주자
다시 실행
잘 됐다..