개발/Spring
[SpringBoot / JSP] AJAX로 여러 이미지 파일 업로드 서버에 전송하기
신매력
2021. 9. 27. 17:54
1. JSP
[태그 부분]
<form id="uploadForm" method="post" action="/upload_image">
<input type="file" name="images" multiple="multiple" accept=".png, .jpg, .jpeg">
<button type="button" id="uploadBtn">업로드</button>
</form>
[자바스크립트 부분]
var inputFileList = new Array(); // 이미지 파일을 담아놓을 배열 (업로드 버튼 누를 때 서버에 전송할 데이터)
// 파일 선택 이벤트
$('input[name=images]').on('change', function(e) {
var files = e.target.files;
var filesArr = Array.prototype.slice.call(files);
// 업로드 된 파일 유효성 체크
if (filesArr.length > 3) {
alert("이미지는 최대 3개까지 업로드 가능합니다.");
$('input[name=images]')val();
return;
}
filesArr.forEach(function(f) {
inputFileList.push(f); // 이미지 파일을 배열에 담는다.
});
});
// 업로드 수행
$('#uploadBtn').on('click', function() {
console.log("inputFileList: " + inputFileList);
let formData = new FormData($('#uploadForm')[0]); // 폼 객체
for (let i = 0; i < inputFileList.length; i++) {
formData.append("images", inputFileList[i]); // 배열에서 이미지들을 꺼내 폼 객체에 담는다.
}
$.ajax({
type:'post'
, enctype:"multipart/form-data" // 업로드를 위한 필수 파라미터
, url: '/upload_image'
, data: formData
, processData: false // 업로드를 위한 필수 파라미터
, contentType: false // 업로드를 위한 필수 파라미터
, success: function(data) {
alert(data);
}
, error: function(e) {
alert("error:" + e);
}
});
});
2. 서버
[컨트롤러]
@ResponseBody
@PostMapping("/upload_image")
public String uploadImage(
@RequestParam("images") List<MultipartFile> files) {
return "success";
}