1 minute read

파일데이터 비동기 전송하기


1. form에 enctype 설정하기
content-type를 아래와 같이 설정해야 한다.
enctype="multipart/form-data"

2. js에서 form 값 가져와서 비동기로 서버에 전송하기

function image_Save(){
	
	var regfrm = document.regForm; // form 값 가져오는 방법1
	var FILEURL = regfrm.FILE_URL.value;
	
	if(FILEURL == "" ) { // 유효성검사도 해주었다.
		alert("파일을 선택하세요.");
		return;		
	}
	
	var frm = new FormData($('#regForm')[0]); // form 값 가져오는 방법2
	
    $.ajax({
        url: '/img/imageReg.ajax', //보낼 곳
        data: frm,
        contentType: false, //중요
        processData: false, //중요
        type: 'POST',
        success: function(data){
			alert(JSON.parse(data).message); //서버에서 결과값 받음
        }
	}); 
}

3. 서버에서 받기
MultipartFile 인터페이스로 데이터를 받아 사용하였고, 여러개는 리스트로 받았다.


추가공부

[ 참고 : https://caileb.tistory.com/152]
스프링에서 제공하는 MultipartFile 클래스와 MultipartHttpServletRequest 클래스 사용해서 파일업로드 기능 구현할수 있음
(파일업로드에서 서버 요청은 multipart/form-data로 해야함)

컨트롤러에서 받는 3가지 방법
1. @RequestParam 어노테이션과 MultipartFile 타입으로 받기
요청 메시지에서 파라미터들이 분리되어 들어오므로 골라서 사용 가능하나
파일 외에 다른 타입 추가해서 받으면 코드가 지저분해질 수 있음
2. MultipartServletRequest 또는 HttpServletRequest 타입으로 받기
요청메시지 자체를 컨트롤 하므로 메시지 안의 파라미터를 뜯어내야 함
(MultipartHttpServletRequest와 MultipartFile로 파일 추출가능) -> 양이 많으면 지저분해질 수 있음
3. 사용자 정의 Class 타입으로 받기
요청 파라미터 타입을 사용자가 정의한 클래스 타입으로 사용(커맨드 객체라고 부름)
미리 만들어 두어야 하는 귀찮음 있지만,
클래스 구조에 맞게 파싱되므로 객체로 컨트롤 가능하고 코드 깔끔해질 수 있는 장점(MultipartFile 타입을 클래스에 작성해두면 됨)