본문 바로가기

programming/웹프로그래밍

[spring] 로컬 파일에 Img 저장하기! - (ServletContext), Clone Coding

반응형

1. 개요

 

 Django를 공부하다가 동기에게 실속있게 도움되는 프로젝트를 해보자는 제안이 왔다. 프로젝트에 목말라있던 나에게는 아주 좋은 기회였다. 바로 승낙했지만 정말 충격이었다...... Clone 코딩을 같은 수준의 대학생들과 같이 진행하는 것이 첫번째 임무. 난 Spring에 대해서 아무것도 몰랐는데 CRUD를 간단하게 구현한 몇줄짜리 코드를 보며 spring을 공부하기 시작했다.(실화이다.)

 

 내가 맡은 일은 데이터베이스에 이미지를 포함한 여러 데이터를 저장하는 것. CRUD에서 'C' 이다. dao, dto는 어렵다고 느껴지지 않을 만큼 삽질을 한 것 같다. 다음은 내가 찾은 img를 저장하는 방법에 대해 공유하고자 한다.

 

2. 내용

 

 나는 이미지를 로컬폴더에 저장하였다. 서버단으로 넘어가면 out폴더에 저장된다고 할 수 있다. 일단 가장먼저 해야할 것은 resources파일에 하위폴더를 만들 것. 나는 resourses파일 밑에 lectureImg라는 파일을 만들었다.



 자 나는 이곳에 받아온 이미지 파일을 저장할 것이다. 팁으로 말해주자면 로컬파일 즉 src파일 하위에 있는 resources파일에 lectureImg파일을 생성해도 가끔 out파일에는 생성되지 않는 경우가 있다. 이럴때는 out파일에도 직점 resources파일을 생성해주면 된다. 

 

- 상대경로를 절대경로처럼!

 

 이게 무슨 말인가 싶기도 하다. 하지만 생각해보면 간단하다. out폴더가 생성되는 파일은 "상대경로" 이다. 우리 팀이 프론트 백앤드 포함 7명이다. 이 7명의 로컬 경로를 다 맞춰야 할까? 아니다. out폴더가 어디에 생성됐는지만 알면 된다. 그래서 다음과 같은 문법을 사용한다.

 

String webappRoot = servletContext.getRealPath("/");

 

 이렇게 되면  webappRoot에는 resources의 상위 디랙토리까지의 경로가 저장된다. 위의 폴더를 보면 나의 resoursec파일은 test_Web_exploded 파일 밑에 존재한다. 그럼 webappRoot라는 변수에는 다음과 같이 저장된다.


~wapp\out\artifacts\test_Web_exploded\


 이제 우리의 역할은 그 뒤에 resources를 이어 경로를 적어주는 것이다. 나같은 경우는 resources/lectureImg/를 붙여주면 나의 상대경로가 완성되는 것이다! 다음은 예제 코드이다.

 

String webappRoot = servletContext.getRealPath("/");
String relativeFolder = File.separator + "resources" + File.separator + "lectureImg" + File.separator;

 

 여기서 File.separator은 슬레쉬를 의미한다. 이제 경로는 구할 수 있다. webappRoot에 relativeFolder을 구하면 내 로컬 개발 환경의 상대경로가 저장된다. 이제 여기서 파일 이름을 더해주고 FileCopyUtils.copy() 메소드를 통해 저장만 해주면 된다. 다음은 예시 코드이다.

 

 @RequestMapping(value = "/", method = RequestMethod.POST)
    public String insert(@RequestParam("lecImg") MultipartFile file) throws IOException {

        String webappRoot = servletContext.getRealPath("/");
        String relativeFolder = File.separator + "resources" + File.separator + "lectureImg" + File.separator;

        String filename = webappRoot + relativeFolder + file.getOriginalFilename();
        String lecFileName = relativeFolder + file.getOriginalFilename();


        FileCopyUtils.copy(file.getBytes(), new File(filename));

        return "redirect:/";
    }

 

- 참고자료


stackoverflow.com/questions/36981703/how-to-upload-files-in-resources-folder-in-spring-rest

 

How to upload files in resources folder in spring rest

I have a folder inside resources folder where I want to upload media files. But I am constantly getting 'No file or directory found' error. Here is what I have in my controller @Autowired

stackoverflow.com

stackoverflow.com/questions/27909583/write-a-file-to-resources-folder-in-spring

 

Write a file to resources folder in Spring

I want to know, how to write a file to a resources folder in a Spring MVC project. I defined the resources path in a web-dispatcher-servlet.xml as

stackoverflow.com


※ 이미지 저장에 대한 오류처리를 포스팅했습니다. 이글을 읽으셨으면 꼭 다음 포스팅도 봐주세요.


다음 포스팅: apape1225.tistory.com/68

 

[spring] 로컬 파일에 이미지 저장과 예외처리 - (SimpleDateFormat)

1. 개요  바로 직전 포스팅이 바로 Spring에서 이미지를 저장하는 방법이다. 이 방법에서 심각한 문제를 발견하였다. 우리가 웹 사이트를 만들면 다양한 사람이 사이트를 사용한다. 이런 경우를

apape1225.tistory.com


 

반응형