이전 글에서는 파일 크기 제한, 확장자 제한, UUID를 적용해 안전하게 파일을 저장하는 방법을 알아보았습니다.
2026.03.18 - [Spring/multipart] - Spring 파일 업로드 ④ - 파일 크기, 확장자 제한 & UUID 파일 이름 처리
하지만 업로드가 성공하더라도 사용자는 지금 어떤 파일이 올라갔는지 바로 확인하기 어렵습니다.
그래서 이번 글에서는
- 업로드된 파일이 이미지인지 확인하고
- 이미지 파일의 경우 썸네일을 생성하며
- 업로드 결과를
uploadAjax.html화면에 리스트 형태로 출력하는 과정
을 정리해보겠습니다.
📌 1. 이미지 타입 확인이 필요한 이유
업로드된 파일이 이미지인지 아닌 지에 따라 처리 방식이 달라지기 때문입니다.
| 이미지 타입 | 일반타입 |
| 썸네일 생성 가능 | 그대로 표시 |
특히 이미지의 경우, 원본을 바로 보여주기보다는 작은 썸네일을 먼저 보여주도록 하는 것이 일반적입니다.
📌 2. 이미지 타입 확인 함수 만들기
파일이 이미지인지 확인하기 위해 다음과 같은 함수를 만들어줍니다.
private boolean checkImageType(File file){
try{
String contentType= Files.probeContentType(file.toPath());
log.info(MyUtil.getColor()+"파일타입은 "+ contentType+MyUtil.END);
if(contentType==null) return false;
return contentType.startsWith("image");
}
catch(Exception e){
log.error("checkImageType error", e); // ✅ 스택트레이스 로그
return false;
}
}
☑️ 2.1 파일 타입 확인하기 (MIME 타입)
String contentType= Files.probeContentType(file.toPath());
Files.probeContentType() : 파일의 실제 타입(MIME 타입)을 확인하는 메서드
예를 들어
• 이미지 파일 → image/png
• PPT 파일 → application/vnd.openxmlformats-officedocument.presentationml.presentation
👉 즉, 확장자가 아닌 실제 파일 타입을 기준으로 판단합니다.
☑️ 2.2 이미지 여부 판단하기
return contentType.startsWith("image");
contentType 이 image 로 시작하면 이미지 파일 🅾️ ▶︎ true 반환
📌 3. 썸네일 생성하기
이미지 파일이라면 썸네일을 생성해줍니다.
if(checkImageType(saveFile)){
// 이미지 파일이면 썸네일을 만들어준다
FileOutputStream thumbnail
= new FileOutputStream(new File(uploadPath,"s_"+uploadFileName));
Thumbnailator.createThumbnail(f.getInputStream(),thumbnail,100,100);
thumbnail.close();
}
else{
log.info(MyUtil.getColor()+"!!!image type이 아님!!"+MyUtil.END);
}
}
☑️ 3.1 FileOutputStream 이란?
FileOutputStream thumbnail = new FileOutputStream(...)
• 파일을 디스크에 직접 쓰기 위한 스트림
• 즉, 썸네일 이미지를 새로운 파일로 저장하기 위해 사용
👉 쉽게 말하면
👉 “이 파일에 데이터를 써주세요”라고 지정하는 역할
☑️ 3.2 Thumbnailator.createThumbnail()
Thumbnailator.createThumbnail(inputStream, outputStream, 100, 100);
• 이미지 파일을 받아서
• 지정한 크기로 줄인 뒤
• 새로운 파일로 만들어줌
👉 여기서는 100x100 크기의 썸네일 생성 & "s_" prefix로 썸네일 구분
📌 4. 업로드 결과 리스트 만들기
이제 업로드된 결과를 화면에 보여주는 단계입니다.
☑️ 4.1 결과를 출력할 영역 만들기
<div class="uploadResult">
<ul>
</ul>
</div>
☑️ 4.2 업로드 결과 출력 함수 만들기
let uploadResult=$(".uploadResult ul");
function showUploadFile(uploadResultArr){
let str="";
$(uploadResultArr).each(function(i,obj){
str+="<li>"+obj.fileName+"</li>";
})
uploadResult.append(str);
}
👉 서버에서 전달받은 파일 정보를
👉 <li> 형태로 만들어 <ul>에 추가합니다.
☑️ 4.3 Ajax 요청과 결과 처리
$.ajax({
url:"/upload/uploadAjaxPost",
processData :false,
contentType:false,
data:formData,
type:"POST",
success:function(result){
alert("File Upload Completed");
console.log(result);
showUploadFile(result);
}
})
👉 핵심 흐름
- 파일 업로드 요청
- 서버에서 결과 반환
- showUploadFile() 호출
- 화면에 리스트 출력
💭 마무리하며..
이번 글에서는
업로드된 파일이 이미지인지 확인하고,
이미지 파일의 경우 썸네일을 생성한 뒤,
업로드 결과를 화면에 출력하는 과정까지 살펴보았습니다.
다만, 현재 상태에서는 결과가 undefined로 보일 수 있습니다.
이 부분은 다음 글에서 다룰 @ResponseBody를 통해 해결해보겠습니다.
'Spring > multipart' 카테고리의 다른 글
| Spring 파일 업로드 ④ - 파일 크기, 확장자 제한 & UUID 파일 이름 처리 (0) | 2026.03.18 |
|---|---|
| Spring 파일 업로드 ③ uploadAjax – Ajax 이용하기 (0) | 2026.03.06 |
| Spring 파일 업로드 ② - uploadForm으로 업로드 구현하기 (0) | 2026.02.23 |
| Spring 파일 업로드 ① - multipart/form-data 개념과 기본 설정 (1) | 2026.02.18 |