티스토리 뷰

반응형

클라이언트에서 파일 전송을 위한 것을 서버에서 적용하기 위해 MultipartFile이라는 Object를 주로 사용합니다. MultipartFile은 스프링에 기본 내장되어 있는 클래스입니다. 패키지의 출처는 아래와 같습니다.

import org.springframework.web.multipart.MultipartFile;

 

멀티파트 파일을 올리기 전에 Util 클래스를 따로 생성하여 적용하여도 좋습니다.

보통은 Controller에서 @ModelAttribute 어노테이션을 사용하던지, @RequestParam 어노테이션을 사용하여도 됩니다.

Controller

@PostMapping("/imageUpload")
@ResponseBody
public String imageUpload(@ModelAttribute MultipartFile file){
    return service.imageUpload(file.getMultipartFile());
}

 

클라이언트는 웹 또는 앱이 있으나 편의상 웹을 기준으로 소스를 작성해보면 아래와 같을 것입니다. 가장 보편적으로 사용하는 jQuery ajax를 사용하였습니다.

jQuery ajax

let file = $('input[name=multipartFile1]')[0];
let formData = new FormData();
formData.append('multipartFile', file.files[0]);
if(file.files || file.files[0])
$.ajax({
    url: "/main/imageUpload",
    type: "POST",
    enctype: "multipart/form-data",
    data: formData,
    processData: false,
    contentType: false,
    success : function(data){
        $("input[type=multipartFile1]").val(data);
    },
    error : function(){
        reject();
    }
});

 

이렇게 클라이언트에서 멀티파일을 전송할 준비가 끝났으면, 서버에서 다음과 같이 처리 가능합니다.

private static String DOMAIN = "/usr/niyoung";
private static String ROOT = "/main";
private static String PATH_FORMAT = "/yyyy/MM/dd";
public String imageUpload(MultipartFile file) {
    try {
        byte[] fileData = IOUtils.toByteArray(file.getInputStream());
        String sourceFileName = file.getOriginalFilename();
        String fileExt = FilenameUtils.getExtension(sourceFileName).toLowerCase();
        String path = new SimpleDateFormat(PATH_FORMAT).format(new Date());
        String contentType = file.getContentType();
        String fileName = System.currentTimeMillis() + "." + fileExt;
        return DOMAIN + ROOT + path + "/" + fileName;
    } catch (IOException e) {
        log.error(ExceptionUtils.getStackTrace(e));
        return null;
    }
}

 

DOMAIN은 사용자의 디렉터리 또는 AWS Service를 사용한다면 변경하여도 좋습니다. ROOT는 데이터가 이미지로 변환되는 디렉터리를 의미합니다.

반응형

'Server' 카테고리의 다른 글

[Java] 타입 변환  (0) 2020.04.17
Firebase 알아보기  (0) 2020.04.07
[Java] Model과 Lombok(Builder)  (0) 2020.02.12
[Java] Cron 표현식  (0) 2019.12.19
SQL에 대해 알아보자  (0) 2019.12.15
[Java] 날짜 생성/변환  (0) 2019.12.06
댓글
공지사항