https://ssdragon.tistory.com/99
파일 저장은 위 게시글을 살펴보자.
@PostMapping("/filetest")
public String addImage2(@RequestParam("Photo") MultipartFile uploadFile,
HttpServletRequest request) {
String fileName = uploadFile.getOriginalFilename();
String filePath = request.getSession().getServletContext().getRealPath("/");
try {
uploadFile.transferTo(new File(filePath + fileName));
System.out.println("이미지 파일 저장 완료");
} catch (IllegalStateException | IOException e) {
e.printStackTrace();
}
return " 파일 저장 완료";
}
이런 식으로 MultipartFile 타입으로 파일을 받고, HttpServletRequest 타입의 request도 같이 받아서 파일을 저장할 것이다.
파일의 getOriginalFilename() 으로 파일명을 받아서 fileName에 저장하고 이 다음 파일 경로를 받는 부분이 중요하다.
request.getSession().getServletContext().getRealPath("/") 경로는?
내 프로젝트/src/main/webapp 파일 경로이다.
즉, 저 경로에 webapp 파일이 없다면 에러가 나거나 톰캣의 임시폴더에 저장되게 된다.
/private/var/folders/1v/n5kd8p912jbcb_q29nycvddm0000gn/T/tomcat-docbase.8080.2357231394449395945/
위는 맥북 IntelliJ의 톰캣 임시경로이다.
즉, 이러한 오류를 방지하려면 webapp 파일을 꼭 만들어줘야한다.
이렇게 webapp파일을 만드니까 정상적으로 파일이 업로드되는 것을 알 수 있다.
파일을 읽을 때 참고사항
Spring Boot 와 Thymeleaf 적용중이라면 기본적으로 static에서 파일을 읽게 된다. (css 또는 js 파일 등)
그래서 파일 업로드된 이미지파일을 불러올 때 경로 오류로 불러오지 않는 상황이 생길 수도 있다.
이 때는 정적 리소스에 접근해서 경로를 바꿔줘야한다.
application.properties 에서 다음과 같이 코드를 적어주자.
spring.mvc.static-path-pattern=/webapp/**
이렇게 static 경로를 webapp 밑으로 된 파일들에서 찾는다고 변경한다는 코드이다.
'Spring > Spring' 카테고리의 다른 글
스프링부트 시큐리티 - SNS 로그인과 SNS 회원가입 (0) | 2022.03.17 |
---|---|
스프링부트 시큐리티 - 일반 로그인과 회원가입 (0) | 2022.03.17 |
Entity 보다는 DTO로 반환하자. (0) | 2022.03.16 |
스프링부트 View 환경설정 (0) | 2022.01.24 |
스프링부트 라이브러리 살펴보기 (0) | 2022.01.12 |