DS's『 행복합시다 』

Carpe Programming/java

MultipartFile in DTO 파일 업로드

nolite 2023. 2. 6. 15:44
반응형

파일 업로드 관련하여 개인 프로젝트 수정 요청을 받았다.

사실 실무를 할 때는 업로드 같은 필수 기능들은 다 common util 화 되어 있어서 신경 쓸 필요가 없지만..

개인 프로젝트에서는 핵심 기능을 먼저 신경 쓰다 보니 싱싱한? 코딩이 되어 있는 것 같다.

요청 사항은 일단 "입력 데이터들 등록하면서 같이 파일 업로드 처리도 되게 해달라" 인데,   음.. 별 거 아닌데? 라고.. 생각했지만

일단 상태 파악을 위해서 개발 환경 세팅하는 데에서도 시간을 썼고 퇴근하고 보려니 피곤하고, 주말에는 산책 갔다 왔더니 피곤하고,

수 많은 핑계로 미루고 미루고 있었는데, 요청하신 분의 메세지 "잘 돼가?"

음....

괜히 한다고 했나.. 싶은 생각이 들었다...@.@

부담 스럽네...>>_<<

여튼!!

보기로 했으니까 보자~


Single File

[ MultipartDTO ] 

import org.springframework.web.multipart.MultipartFile;

public class MultipartDto {
    private MultipartFile file;
}

 

[ Controller ]

@PostMapping(value = "/board")
    public @ResponseBody String uploadFileInDto(@ModelAttribute MultipartDto board) {
        MultipartFile multipartFile = board.getFile();
        try (FileOutputStream writer = new FileOutputStream("./images/" + multipartFile.getOriginalFilename())) {
            writer.write(multipartFile.getBytes());
        } catch (Exception e) {
            return "upload fail";
        }
        return "upload success";
    }

 

Multi File

[ MultipartDTO ]

import org.springframework.web.multipart.MultipartFile;

public class MultipartListDto {
    private List<MultipartFile> files;
}

 

[ Controller ]

 @PostMapping(value = "/board/multi")
    public @ResponseBody String uploadFileListInDto(@ModelAttribute MultipartListDto board) {
        for (MultipartFile multipartFile : board.getFiles()) {
            try (FileOutputStream writer = new FileOutputStream("./images/" + multipartFile.getOriginalFilename())) {
                writer.write(multipartFile.getBytes());
            } catch (Exception e) {
                return "fail";
            }
        }
        return "success";
    }

 

Multi File Map

[ MultipartMapListDto ]

import org.springframework.web.multipart.MultipartFile;

public class MultipartMapListDto {
    private Map<String, List<MultipartFile>> files;
    
    /* single file
    private Map<String, MultipartFile> files;  
    */
}

 

[ Controller ]

@PostMapping(value = "/board/map")
    public @ResponseBody
    String uploadFileMapListInDto(@ModelAttribute MultipartMapListDto board) {
        Map<String, List<MultipartFile>> files = board.getFiles();
        for (String key : files.keySet()) {
            List<MultipartFile> multipartFiles = files.get(key);
            for (MultipartFile multipartFile : multipartFiles) {
                try (FileOutputStream writer = new FileOutputStream("./images/" + multipartFile.getOriginalFilename())) {
                    writer.write(multipartFile.getBytes());
                } catch (Exception e) {
                    return "fail";
                }
            }
        }
        return "success";
    }

 

front 는 생략  #_+

728x90
반응형