Backend/Spring

[Spring]게시글 사진 업로드기능 구현(MultipartHttpServletRequest)

Chung-A 2020. 7. 16. 20:52

[Spring]게시글 사진 업로드기능 구현(MultipartHttpServletRequest)

 

Spring 프로젝트를 개발하면서 게시판 기능을 만들던 중

 

프론트에서 전달된 이미지 파일을 받아서 서버에 저장해야 하는 경우가 생겼습니다.

 

 

앱에서 서버로 MultipartHttpServletRequest를 이용하여 request에 이미지 파일을 붙여서 요청을 보내주면

 

서버에서 이미지를 아래와 같은 코드로 받아서 처리하였습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    @RequestMapping(value="/image.do",method=RequestMethod.POST)
    public @ResponseBody Integer insertBoardInfo(HttpServletRequest request)
   {
        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
        MultiValueMap<String, MultipartFile> files = multipartRequest.getMultiFileMap();
        Iterator<Map.Entry<String, List<MultipartFile>>> iter = files.entrySet().iterator();
        List<MultipartFile> multipartFileList = new ArrayList<>();
 
        while(iter.hasNext()){
            Map.Entry<String, List<MultipartFile>> entry = iter.next();
            List<MultipartFile> fileList = entry.getValue();
            for (MultipartFile file : fileList) {
                if(file.isEmpty()) continue;
 
                multipartFileList.add(file);
            }
        }

//이후 받은 multipartFileList를 서버에 저장하는 로직 구현.
//...
        return cnt;
    }
cs

 

구체적인 과정은 다음과 같습니다

 

1. 요청이 들어오면 HttpServletRequest를 MultipartHttpServletRequest로 암시적 형변환

 

2. multipartRequest에서 MultiValueMap과 Iterator를 이용하여 각 Multipart 파일들을 꺼내고 최종적으로 List<MultipartFile>형태로 변환

 

이렇게 해서 만들어진 List<MultipartFile>을 서버의 경로에 저장시켜두었다가

 

나중에 요청이 들어오면 저장되었던 사진 경로로 찾아 들어가서 반환해주는 방식으로

 

게시판의 사진 업로드 기능을 구현하였습니다